libro
www.tuyano.com
初心者のためのCakePHP3 プログラミング入門

コントローラー(Controller)を利用する (5/5)

作成:2015-08-22 09:59
更新:2015-08-22 09:59

■アクションの呼び出しとリダイレクト

コントローラーには、もちろん複数のアクションを用意することができます。これには、2つのやり方があります。

1つは、リダイレクトする方法。これはControllerクラスにある「redirect」というメソッドを使います。アクション内から利用するなら、
$this->redirect( アドレス );

こんな形で呼び出します。引数のアドレスは、コントローラー以下の部分を指定すればいいでしょう。例えば、'/helo/abc'と指定すれば、HeloControllerabcアクションにリダイレクトできます。

リダイレクトの場合、ブラウザ側で別アドレスに移動するわけですから、表示されるアドレスも当然変わります。そうではなくて、CakePHPの内部で実行するアクションが変更されるようにすれば、見た目にはアクションが変更されたこともわからず、処理だけが別のアクションに変更されます。

これはControllerクラスの「setAction」というメソッドを利用して行います。以下のような形ですね。
$this->setAction( アクション名 );

これで別のアクションを呼び出すことができます。ただし、当たり前ですが呼び出せるのはこのコントローラーに用意されているアクションだけです。

では、簡単な利用例を下にあげておきましょう。ここでは、indexerrの2つのアクションを用意しています。indexでは引数を1つ用意してあります。パラメータがあった場合はその内容を表示し、もしパラメータがなければerrアクションを実行します。

setActionを使う場合、いくつか注意すべき点があります。1つは、「まだ何も出力されていない段階で実行する」という点です。また、setActionの後はreturnし、その後で処理を実行させない、ということでしょう。これを怠ると、setActionしたアクションと、今のアクションが混じった形で出力されてしまいます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<?php
namespace App\Controller;

use App\Controller\AppController;

class HeloController extends AppController
{
    public function index($a = '')
    {
        //$this->set('message', 'Hello! this is sample page. ;-)');
        if ($a == '') {
            $this->setAction('err');
            return;
        }
        $this->autoRender = false;
        echo "<html><head></head><body>";
        echo "<h1>Hello!</h1>";
        echo "<p>これは、サンプルで作成したページです。</p><p>";
        //echo " パラメータ: " . $a;
        echo "</p></body></html>";
    }
    
    public function err()
    {
        $this->autoRender = false;
        echo "<html><head></head><body>";
        echo "<h1>Hello!</h1>";
        echo "<p>パラメータがありませんでした。</p>";
        echo "</body></html>";
    }
}

※関連コンテンツ

「初心者のためのCakePHP3 プログラミング入門」に戻る