CakePHP: Найти, если мобильный браузер в помощнике (нет доступа к обработчику запросов) - PullRequest
1 голос
/ 05 августа 2011

Мне нужно знать помощнику в приложении CakePHP, является ли устройство мобильным, я хотел бы использовать $ this-> RequestHandler-> isMobile (), но компонент обработчика запросов недоступен в помощниках.Есть идеи?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 05 августа 2011

Вы можете импортировать класс и использовать его в любом месте фреймворка следующим образом:

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 голос
/ 05 августа 2011

Кроме того, все параметры, заданные в свойстве 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);
    }

}
0 голосов
/ 16 января 2017

В принятом ответе предлагается использовать компонент внутри помощника, которого следует избегать, поскольку компоненты предназначены исключительно для использования в контроллерах, что приведет к ошибкам, упомянутым Anupal.

Простым решением является использование класса CakeRequest, который используется RequestHandlerComponent.Таким образом, в вашем помощнике вы можете сделать: -

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