Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Symfony 1.4中实现移动版?_Php_Mobile_Symfony1_Symfony 1.4 - Fatal编程技术网

Php 如何在Symfony 1.4中实现移动版?

Php 如何在Symfony 1.4中实现移动版?,php,mobile,symfony1,symfony-1.4,Php,Mobile,Symfony1,Symfony 1.4,实现在Symfony 1.4中开发的Web应用程序的MobileVersion的最佳方法是什么?我在谷歌上搜索,但没有成功 不知道如何开始,也不知道是否有任何标准可以遵循。我应该实现不同的模板还是完全不同的应用程序(如前端/后端) 我的第一个任务是实现一个过滤器,它的作用类似于onRequest侦听器,如果用户代理是移动的,则重定向到移动应用程序。但我认为,通过这种方式(使用不同的应用程序)很难从移动版迁移到浏览器版,反之亦然。这几乎就是symfony网站上定义的方式 检查文章:,特别是这一部分

实现在Symfony 1.4中开发的Web应用程序的MobileVersion的最佳方法是什么?我在谷歌上搜索,但没有成功

不知道如何开始,也不知道是否有任何标准可以遵循。我应该实现不同的模板还是完全不同的应用程序(如前端/后端)


我的第一个任务是实现一个过滤器,它的作用类似于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?您是对的。所以我认为过滤器是更好的处理方法。