基本
Controller内で複数回定義している、同じ内容の変数を共通化します。
修正前
src/Controller/SamplesController.php
・・・省略
class SamplesController extends AppController{
public function index(){
$data = "あいうえお";
//重複箇所
}
public function add(){
$data = "あいうえお";
//重複箇所
}
}
上記の例だとindex()とadd()に変数$dataの定義が重複しています。
内容も全く同じなので、一箇所で定義したいところです。
修正後
class SamplesController extends AppController{
private $commonVariable;
public function beforeFilter(\Cake\Event\EventInterface $event)
{
parent::beforeFilter($event);
$this->commonVariable = "あいうえお";
}
public function index(){
$data = $this->commonVariable;
}
public function add(){
$data = $this->commonVariable;
}
}
Controller内で共通で使う変数を定義できます。
この例ではコード量はあまり変わりませんが、共通化することで編集はしやすくなります。
利用例
Tableの定義を各関数で繰り返すのではなく、最初に共通化してしまいます。
class SamplesController extends AppController{
private $usersTable;
private $articlesTable;
private $tagsTable;
public function beforeFilter(\Cake\Event\EventInterface $event)
{
parent::beforeFilter($event);
$this->usersTable = $this->getTableLocator()->get('Users');
$this->articlesTable = $this->getTableLocator()->get('Articles');
$this->tagsTable = $this->getTableLocator()->get('Tags');
}
public function index(){
//※以下の2行が不要になる。
//usersTable = TableRegistry::getTableLocator()->get('Users');
//articlesTable = TableRegistry::getTableLocator()->get('Articles');
$user = $this->usersTable->find()->where(["id"->1])->first();
$article = $this->articlesTable->find()->where(["id"->1])->first();
}
public function add(){
$user = $this->usersTable->find()->where(["id"->1])->first();
$tag = $this->tagsTable->find()->where(["id"->1])->first();
}
public function edit(){
$article= $this->articlesTable->find()->where(["id"->1])->first();
$tag = $this->tagsTable->find()->where(["id"->1])->first();
}
}
各関数内でTableRegistry内でテーブルを登録するよりも、コードをすっきりさせることができます。
コメント