コントローラー(Controller)を利用する (5/5)
作成:2015-08-22 09:59
更新:2015-08-22 09:59
更新:2015-08-22 09:59
■アクションの呼び出しとリダイレクト
コントローラーには、もちろん複数のアクションを用意することができます。これには、2つのやり方があります。
1つは、リダイレクトする方法。これはControllerクラスにある「redirect」というメソッドを使います。アクション内から利用するなら、
こんな形で呼び出します。引数のアドレスは、コントローラー以下の部分を指定すればいいでしょう。例えば、'/helo/abc'と指定すれば、HeloControllerのabcアクションにリダイレクトできます。
リダイレクトの場合、ブラウザ側で別アドレスに移動するわけですから、表示されるアドレスも当然変わります。そうではなくて、CakePHPの内部で実行するアクションが変更されるようにすれば、見た目にはアクションが変更されたこともわからず、処理だけが別のアクションに変更されます。
これはControllerクラスの「setAction」というメソッドを利用して行います。以下のような形ですね。
これで別のアクションを呼び出すことができます。ただし、当たり前ですが呼び出せるのはこのコントローラーに用意されているアクションだけです。
では、簡単な利用例を下にあげておきましょう。ここでは、indexとerrの2つのアクションを用意しています。indexでは引数を1つ用意してあります。パラメータがあった場合はその内容を表示し、もしパラメータがなければerrアクションを実行します。
setActionを使う場合、いくつか注意すべき点があります。1つは、「まだ何も出力されていない段階で実行する」という点です。また、setActionの後はreturnし、その後で処理を実行させない、ということでしょう。これを怠ると、setActionしたアクションと、今のアクションが混じった形で出力されてしまいます。
1つは、リダイレクトする方法。これはControllerクラスにある「redirect」というメソッドを使います。アクション内から利用するなら、
$this->redirect( アドレス );
こんな形で呼び出します。引数のアドレスは、コントローラー以下の部分を指定すればいいでしょう。例えば、'/helo/abc'と指定すれば、HeloControllerのabcアクションにリダイレクトできます。
リダイレクトの場合、ブラウザ側で別アドレスに移動するわけですから、表示されるアドレスも当然変わります。そうではなくて、CakePHPの内部で実行するアクションが変更されるようにすれば、見た目にはアクションが変更されたこともわからず、処理だけが別のアクションに変更されます。
これはControllerクラスの「setAction」というメソッドを利用して行います。以下のような形ですね。
$this->setAction( アクション名 );
これで別のアクションを呼び出すことができます。ただし、当たり前ですが呼び出せるのはこのコントローラーに用意されているアクションだけです。
では、簡単な利用例を下にあげておきましょう。ここでは、indexとerrの2つのアクションを用意しています。indexでは引数を1つ用意してあります。パラメータがあった場合はその内容を表示し、もしパラメータがなければerrアクションを実行します。
setActionを使う場合、いくつか注意すべき点があります。1つは、「まだ何も出力されていない段階で実行する」という点です。また、setActionの後はreturnし、その後で処理を実行させない、ということでしょう。これを怠ると、setActionしたアクションと、今のアクションが混じった形で出力されてしまいます。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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 プログラミング入門」に戻る