コントローラー

基本的なコントローラの書き方

基本的なコントローラの書き方は以下のように記載します。
コントローラが呼ばれた際の実行順は、以下となります。

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日
------------------------------

ページの先頭へ