0

CakePHPを使用して、名前を指定せずにこのコントローラーへの参照を取得するにはどうすればよいですか?

4

2 に答える 2

2

なぜコントローラーを名前で参照したいのですか?Cakeには1つのコントローラーしかロードされていないため、1回のリクエストで他のコントローラーをロードしないでください。1リクエスト==1コントローラー。

名前なしでモデルを参照する場合、デフォルトのモデル名は次のようになります。$this->modelClass

$ this-> {$ this-> modelClass}-> method();

受け入れられた答え(それがあなたが望むモデルである場合)は間違っています。

class UsersController extends AppController {
    public $uses = array('People');

    public function method() {
        $this->{$this->modelClass}->method(); // works

        $controller = Inflector::singularize($this->name);
        $this->$controller->someMethod(); // fatal error
    }
}
于 2012-12-17T15:29:38.173 に答える
1

次のパブリック関数を作成するには、このコントローラーを参照する必要があると思いました。しかし、dogmatic69の方法ははるかに優れています。

// Controller/AppController.php

public function dumpData() {
    if(!Configure::read('debug') > 2)
        throw new Exception(".dumpData() can only be accessed in debug mode.");

    // $controller = Inflector::singularize($this->name);
    // $data = $this->$controller->find('first');
    $this->{$this->modelClass}->find('first');
    die(debug($data));
}
于 2013-01-15T23:50:15.173 に答える