コントローラー(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 プログラミング入門」に戻る