거의 정확히 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();
}
}
출처
2012-09-10 11:15:18
j0k
답장을 보내 주셔서 감사합니다.하지만 sfWebResponse에 액세스 할 수 없어서 ProjectConfiguration 클래스에서 쿠키를 설정할 수 있습니까? 쿠키를 설정하기 위해 응답에 액세스 할 수 있습니까? –
네 말이 맞아. 그래서 저는 필터가 그것을 다루는 더 좋은 방법이라고 생각합니다. – j0k