我需要在 CakePHP 应用程序的助手中知道设备是否是移动的,我很想使用 $this->RequestHandler->isMobile(),但请求处理程序组件在助手中不可用。有什么想法吗?
谢谢!
您可以导入该类并在框架中的任何位置使用它,如下所示:
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 提供正确的结果)
此外,您在
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);
}
}
接受的答案建议在助手中使用组件,应该避免这种情况,因为组件仅在控制器中使用,并且会导致 Anupal 提到的错误。
简单的解决方案是使用
CakeRequest
使用的 RequestHandlerComponent
类。所以在你的助手中你可以这样做:-
App::uses('CakeRequest', 'Utility');
$isMobile = (new CakeRequest())->is('mobile');