CodeLab技術ブログ

プログラミング技術まとめ

[CakePHP3.6]コンポーネントでTableを使いたい

| 0件のコメント

CakePHP3で、コンポーネントでModelを呼び出したかったのですが、うまくいかなかったので調べました。

スポンサードリンク

方法1

呼び元のコントローラー経由でアクセス

public function initialize(array $config) {
    $this->controler = $this->_registry->getController();
}

こうしておけば、
$this->controler->Users->find()…みたいな感じで使えます。
ただし、呼び出し元のコントローラーでモデルを呼び出し済みでないと使えません。
バグの素なのであまりお勧めはしません。

方法2

コンポーネント側で登録する
特にShellから呼び出して使う場合などはこちらのほうが良いと思いますが、バージョンによって方法が異なります。
まーた、CakePHP3お得意の無意味な改変…
ちなみに

$this->loadModel('Users');//これはNG!!

は使えません。

3.6以前

$this->Users = new TableRegistry::get('Users');

3.6以降

$this->Users = new TableRegistry::getTableLocator()->get('Users');

どちらの場合も、ファイルの先頭で

use Cake\ORM\TableRegistry;

をするのをお忘れなく!

スポンサードリンク
スポンサードリンク
スポンサードリンク

コメントを残す