Php 如何在Symfony 1.4中实现移动版?
实现在Symfony 1.4中开发的Web应用程序的MobileVersion的最佳方法是什么?我在谷歌上搜索,但没有成功 不知道如何开始,也不知道是否有任何标准可以遵循。我应该实现不同的模板还是完全不同的应用程序(如前端/后端)Php 如何在Symfony 1.4中实现移动版?,php,mobile,symfony1,symfony-1.4,Php,Mobile,Symfony1,Symfony 1.4,实现在Symfony 1.4中开发的Web应用程序的MobileVersion的最佳方法是什么?我在谷歌上搜索,但没有成功 不知道如何开始,也不知道是否有任何标准可以遵循。我应该实现不同的模板还是完全不同的应用程序(如前端/后端) 我的第一个任务是实现一个过滤器,它的作用类似于onRequest侦听器,如果用户代理是移动的,则重定向到移动应用程序。但我认为,通过这种方式(使用不同的应用程序)很难从移动版迁移到浏览器版,反之亦然。这几乎就是symfony网站上定义的方式 检查文章:,特别是这一部分
我的第一个任务是实现一个过滤器,它的作用类似于onRequest侦听器,如果用户代理是移动的,则重定向到移动应用程序。但我认为,通过这种方式(使用不同的应用程序)很难从移动版迁移到浏览器版,反之亦然。这几乎就是symfony网站上定义的方式 检查文章:,特别是这一部分:
// 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;
}
}
现在,来自iPhone的每个请求都将使用*Success.iPhone.php模板,而不是*Success.php模板
正如你所说,从一个环境切换到另一个环境将变得更加困难。就像通过iPhone查看完整的网站一样。为此,您应该使用session和类似于?doaction=read\u on\u site
的参数来处理它,然后在filterRequestParameters
中设置cookie和检查
编辑:
使用过滤器会更容易。轻松访问请求和响应
<?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();
}
}
我同意过滤方式,它工作得很好
您不应该使用手动检测,而应该使用或类似的库,它为您提供了更大的灵活性
您还可以查看sfView修补程序,当未定义iphone视图时,该修补程序可以退回到默认视图。非常有用。谢谢你的回答。。但是,由于我没有访问sfWebResponse的权限,如何从ProjectConfiguration类设置cookie?是否仍有访问响应的权限来设置cookie?您是对的。所以我认为过滤器是更好的处理方法。