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

问题描述 投票:0回答:3

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

谢谢!

php cakephp mobile request handler
3个回答
3
投票

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

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 提供正确的结果)


1
投票

此外,您在

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);
    }

}

1
投票

接受的答案建议在助手中使用组件,应该避免这种情况,因为组件仅在控制器中使用,并且会导致 Anupal 提到的错误。

简单的解决方案是使用

CakeRequest
使用的
RequestHandlerComponent
类。所以在你的助手中你可以这样做:-

App::uses('CakeRequest', 'Utility');
$isMobile = (new CakeRequest())->is('mobile');
© www.soinside.com 2019 - 2024. All rights reserved.