コントローラー
基本的なコントローラの書き方
基本的なコントローラの書き方は以下のように記載します。
コントローラが呼ばれた際の実行順は、以下となります。
initialize()
↓
beforeFilter()
↓
index()
<?php namespace App\Controller; use App\Controller\AppController; class コントローラ名 extends AppController { public function initialize() { } public function beforeFilter() { } public function index() { } }
redirect() - リダイレクトする
以下のように書くと、Routerで設定されているURLにリダイレクトします。
return $this->redirect([ 'controller' => 'Tests', 'action' => 'index' ]);
相対パスでも書くことができます。
return $this->redirect('/tests/index');
絶対パスでも書くことができます。
return $this->redirect('https://yahoo.co.jp');
HTMLのidやGETパラメータをつけたりもできます。
return $this->redirect([ 'controller' => 'Tests', 'action' => 'index', '?' => [ 'id' => 11, ], '#' => 'top' ]); /* http://.com/Tests/index?id=11#top */
setAction() - 他のアクションの転送する
setAction()メソッドで他のアクションに処理を転送(フォワード)することができます。
リダイレクトとは異なり、処理がアクションからアクションに移動します。
$this->setAction('index');
referer() - リファラーを取得する
referer()メソッドでリファラーを取得することができます。
$url = $this->referer();
このままリダイレクト先に設定することもよくあります。
$this->redirect($url);
コントローラでコンポーネントをロードする
コントローラでコンポーネントを読み込むには、いくつかの方法があります。
フィールドで宣言する
コントローラのpublicフィールドとして、$components(配列)を定義することでコンポーネントをロードできます。
この方法は、コントローラ全体でコンポーネントが使用できるようになります。
public $components = [ 'Auth', 'Cookie', 'Flash' ];
loadComponentを使う
loadComponent()メソッドを使うことで、その場所でのみコンポーネントをロードできます。
$this->loadComponent('Flash');
use句で読み込んで、自分でインスタンス化する
use句で読み込んで、自分でインスタンス化することでもコンポーネントをロードできます。
<?php namespace App\Controller; use Cake\Auth\DefaultPasswordHasher; class FrontController extends AppController { public function initialize() { $hasher = new DefaultPasswordHasher(); } }
Tableオブジェクトをロードする
Tableオブジェクトをロードするには、TableRegistryを使います。
ですのでまずは、コントローラにてuseします。
<?php use Cake\ORM\TableRegistry;
その後呼び出したい場所で以下のように記述します。
$tableNames = TableRegistry::get('TableNames');
コントローラでヘルパーを読み込む
コントローラでヘルパーを読み込む際は、コントローラのメンバ変数$helpersとして定義することでヘルパを使えることができます。
以下の例では、FormHelperを読み込んでいますが、Helperの部分は省略して記載します。
<?php namespace App\Controller; use App\Controller\AppController; class コントローラ名 extends AppController { public $helpers = ['Form']; }
また、beforeRender()に書くことでヘルパーを読み込む方法もあります。
<?php namespace App\Controller; use App\Controller\AppController; class コントローラ名 extends AppController { public function beforeRender(Event $event) { parent::beforeRender($event); $this--->viewBuilder()->helpers(['Form']); } }
ヘルパーを使う時は、$this->Form->xxxx()のように呼び出すことができます。
------------------------------
作成日:2016年07月14日
更新日:2018年01月27日
------------------------------