2011-08-05 5 views

答えて

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

私はエラー 'get非オブジェクト上でエラー'を持っていません。 :( – Anupal

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

} 

あなたのヘルパーのコンストラクタのオプション配列をキャッチすることができます:

0
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'); 
関連する問題