CakePHPアプリケーションのヘルパーでデバイスがモバイルの場合、$ this-> RequestHandler-> isMobileを使用したいと思います()、しかし、リクエストハンドラコンポーネントはヘルパで利用できません。何か案は?CakePHP:ヘルパーのモバイルブラウザが見つかった場合(リクエストハンドラへのアクセスなし)
ありがとうございます!
CakePHPアプリケーションのヘルパーでデバイスがモバイルの場合、$ this-> RequestHandler-> isMobileを使用したいと思います()、しかし、リクエストハンドラコンポーネントはヘルパで利用できません。何か案は?CakePHP:ヘルパーのモバイルブラウザが見つかった場合(リクエストハンドラへのアクセスなし)
ありがとうございます!
あなたがクラスをインポートし、そのようなフレームワークのどこにでもそれを使用することができます。また
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により述べたように誤差をもたらす成分として避けるべきであるヘルパー内部コンポーネントを使用して示唆しています。
RequestHandlerComponent
が使用するCakeRequest
クラスを使用するのが簡単な解決方法です。だから、あなたのヘルパーで行うことができます: -
App::uses('CakeRequest', 'Utility');
$isMobile = (new CakeRequest())->is('mobile');
私はエラー 'get非オブジェクト上でエラー'を持っていません。 :( – Anupal