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:在帮助程序中查找是不是是移动浏览器(无法访问请求处理程序)的主要内容,如果未能解决你的问题,请参考以下文章