1

CakePHP でコンポーネントをその場でロードしたい この例では、json 応答の RequestHandler コンポーネントを動的にロードします

public function xyz() {

    $this->components[] ='RequestHandler';
    $this->Components->load('RequestHandler');
    $this->RequestHandler->initialize($this);

    $abc = array("hello","world");
    $this->set('abc', $abc);
    $this->set('_serialize', array( 'abc'));
}

初期化関数で生成されたエラーは未定義を示しています。

より鮮明な画像のための修正:

public function xyz() {
    $this->components[] ='RequestHandler';
    $this->RequestHandler =  $this->Components->load('RequestHandler');
    $this->RequestHandler->initialize($this);

    $abc = array("hello","world");
    $this->set('abc', $abc);
    $this->set('_serialize', array( 'abc'));
}

私も試しました

public function xyz() {

    $this->RequestHandler =  $this->Components->load('RequestHandler');
    $abc = array("hello","world");
    $this->set('abc', $abc);
    $this->set('_serialize', array( 'abc'));
}

#$this->RequestHandler->getTime(); のようなコンポーネントは使用できません。Cakephp の自動ハンドル json が応答するためです。http://disecake.localhost/resources/xyz.jsonを使用してコードのすぐ上にヒットすると

{"code":500,"url":"/resources/xyz.json","name":"ビュー ファイル " /var/www/disecake/app/View/Resources/xyz.ctp" がありません。"}

私が使うとき

public $components = array( 'RequestHandler');
出力よりもコントローラーで

{"abc":["こんにちは","世界"]}

質問がより明確になったと思います。

4

1 に答える 1

12

文字通り、CakePHP の本に「コンポーネントをオンザフライでロードする」というセクションがあります。

CakePHP 2.x:

http://book.cakephp.org/2.0/en/controllers/components.html#loading-components-on-the-fly

CakePHP 3.x:

http://book.cakephp.org/3.0/en/controllers/components.html#loading-components-on-the-fly

(そして、それはあなたが試みている方法とは異なります)

于 2013-06-25T14:54:59.860 に答える