2012-09-10 3 views
2

Symfony 1.4에서 개발 된 WebApplication의 MobileVersion을 구현하는 가장 좋은 방법은 무엇입니까? 나는 구글에서 검색했지만 성공했다.Symfony 1.4에서 모바일 버전을 구현하는 방법은 무엇입니까?

시작 방법이나 따라야 할 표준이 있는지 정말 모르겠다. 방금 다른 템플릿이나 완전히 다른 응용 프로그램 (예 : 프론트 엔드/백엔드)을 구현해야합니까?

내 첫 번째 질문은 onRequest 리스너처럼 작동하고 user-agent가 모바일 인 경우 모바일 앱으로 리디렉션하는 필터를 구현하는 것입니다. 그러나 나는 이런 식으로 (다른 앱으로) 모바일 버전에서 브라우저 버전으로 또는 그 반대로 마이그레이션하는 것이 매우 어렵다고 생각합니다.

답변

4

거의 정확히 symfony 웹 사이트에서 정의 된 것과 같습니다.

확인 기사 : How to create an optimized version of your website for the iPhone in symfony 1.1, 특별히이 부분 :

// config/ProjectConfiguration.class.php 
class ProjectConfiguration extends sfProjectConfiguration 
{ 
    public function setup() 
    { 
    // ... 

    $this->dispatcher->connect('request.filter_parameters', array($this, 'filterRequestParameters')); 
    } 

    public function filterRequestParameters(sfEvent $event, $parameters) 
    { 
    $request = $event->getSubject(); 

    if (preg_match('#Mobile/.+Safari#i', $request->getHttpHeader('User-Agent'))) 
    { 
     $request->setRequestFormat('iphone'); 
    } 

    return $parameters; 
    } 
} 

이제 아이폰에서 모든 요청은 * Success.iphone.php 대신 Success.php 템플릿 *의 템플릿 사용합니다.

말한 것처럼 환경에서 다른 환경으로 전환하기가 더 어려울 것입니다. iPhone에서 전체 웹 사이트를 보는 것. 이를 위해서는 ?doaction=read_on_site과 같은 매개 변수를 사용하여 세션을 처리하고 filterRequestParameters 안에 쿠키와 수표를 설정해야합니다.

편집 :

대신 필터를 사용하는 것이 더 쉬울 것이다. 요청 및 응답에 쉽게 액세스 할 수 있습니다.

<?php 

class iPhoneFilter extends sfFilter 
{ 
    public function execute ($filterChain) 
    { 
    // get the cool stuff 
    $context = $this->getContext(); 
    $request = $context->getRequest(); 
    $response = $context->getResponse(); 

    if ($this->isFirstCall()) 
    { 
     $cookies = $response->getCookies(); 
     if (preg_match('#Mobile/.+Safari#i', $request->getHttpHeader('User-Agent')) 
     && ! isset($cookies['doaction'])) 
     { 
     $request->setRequestFormat('iphone'); 
     } 
    } 

    // execute next filter 
    $filterChain->execute(); 
    } 
} 
+1

답장을 보내 주셔서 감사합니다.하지만 sfWebResponse에 액세스 할 수 없어서 ProjectConfiguration 클래스에서 쿠키를 설정할 수 있습니까? 쿠키를 설정하기 위해 응답에 액세스 할 수 있습니까? –

+0

네 말이 맞아. 그래서 저는 필터가 그것을 다루는 더 좋은 방법이라고 생각합니다. – j0k

2

나는 필터 방식에 동의하며 매우 효과적입니다.

수동 검색을 사용하는 대신 Mobile detect 또는 유사한 라이브러리를 사용해야하므로 유연성이 향상됩니다.

iphone보기가 정의되어 있지 않을 때 기본보기로 폴백하는 것이 흥미로운 sfView 패치에 대해 this tutorial을 볼 수도 있습니다. 그것은 매우 유용합니다.

관련 문제