CakePHP:在帮助程序中查找是不是是移动浏览器(无法访问请求处理程序)

Posted

技术标签:

【中文标题】CakePHP:在帮助程序中查找是不是是移动浏览器(无法访问请求处理程序)【英文标题】:CakePHP: Find if is mobile browser in a helper (no access to request handler)CakePHP:在帮助程序中查找是否是移动浏览器(无法访问请求处理程序) 【发布时间】:2011-08-05 11:12:35 【问题描述】:

如果设备是移动设备,我需要在 Cakephp 应用程序的助手中知道,我很想使用 $this->RequestHandler->isMobile(),但是请求处理程序组件在助手中不可用。有什么想法吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以导入该类并在框架中的任何位置使用它,如下所示:

App::import('Component', 'RequestHandler'); // import class
$requestHandler = new RequestHandlerComponent(); // instantiate class
$isMobile = $requestHandler->isMobile(); // call method
var_dump($isMobile); // output: bool(true) or bool(false)

(从助手测试并为 Firefox 和 iPhone 提供正确的结果)

【讨论】:

我收到错误 getController() on a non-object 不工作。 :(【参考方案2】:

此外,您在 Controller::helpers 属性中设置的任何选项都将传递给助手:

class AppController extends Controller 

    public $components = array(/*...*/, 'RequestHandler');

    public $helpers = array(/*...*/, 'MyHelper');

    public function beforeFilter() 
        $this->helpers['MyHelper']['mobile'] = $this->RequestHandler->isMobile();
    


您可以在助手的构造函数中捕获选项数组:

class MyHelper extends AppHelper 

    protected $_defaultOptions = array('mobile' => false);

    public function __construct($options) 
        $this->options = array_merge($this->_defaultOptions, $options);
    


【讨论】:

【参考方案3】:

接受的答案建议在帮助程序中使用组件,应避免使用组件,因为组件仅用于控制器,并且会导致 Anupal 提到的错误。

简单的解决方案是使用RequestHandlerComponent 使用的CakeRequest 类。所以在你的助手中你可以这样做:-

App::uses('CakeRequest', 'Utility');
$isMobile = (new CakeRequest())->is('mobile');

【讨论】:

以上是关于CakePHP:在帮助程序中查找是不是是移动浏览器(无法访问请求处理程序)的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 2.1 - 模型关联 - 保存和查找

CakePhp 移动后无法启动

CakePHP 多模型关联

在AWS S3上存储CakePHP库以用于多个应用程序

Cakephp 安全性

CakePHP导入帮助程序