コントローラーを使おう! (4/5)
作成:2011-11-02 08:05
更新:2011-11-02 08:05
更新:2011-11-02 08:05
■リダイレクトするには?
単純にアクションを定義して表示するのは、できるようになりました。では、複数のアクションを定義して、連携して動かしてみることにしましょう。
アクションは、コントローラーにアクションメソッドを用意すればどんどん増やしていくことができます。アドレスをきちんと指定しさえすれば、いくつものページを用意することができます。単にアクションの名前でメソッドを用意するだけですから、これはわかりますね。
ただ増やすだけではつまらないので、「別のページへのリダイレクト」の機能を使ってみることにしましょう。下のリスト欄に、サンプルを挙げておきます。SampleController.phpを修正してください。
これは、indexアクションにアクセスすると、otherアクションにリダイレクトします。/sample/indexにアクセスしてみましょう。アドレスを見ると、/sample/otherに変わっているはずです。
リダイレクトは、AppControllerの「redirect」メソッドを使って行えます。これは引数が幾つかあるのですが、もっとも簡単な使い方は、リダイレクト先のアドレスを渡すだけです。
もし、密かに別のアクションに処理を送りたければ、別のやり方も可能です。これはリダイレクトではなく「フォワード(サーバー内で別アドレスの内容を結果として出力する)」という操作になります。
アクションは、コントローラーにアクションメソッドを用意すればどんどん増やしていくことができます。アドレスをきちんと指定しさえすれば、いくつものページを用意することができます。単にアクションの名前でメソッドを用意するだけですから、これはわかりますね。
ただ増やすだけではつまらないので、「別のページへのリダイレクト」の機能を使ってみることにしましょう。下のリスト欄に、サンプルを挙げておきます。SampleController.phpを修正してください。
これは、indexアクションにアクセスすると、otherアクションにリダイレクトします。/sample/indexにアクセスしてみましょう。アドレスを見ると、/sample/otherに変わっているはずです。
リダイレクトは、AppControllerの「redirect」メソッドを使って行えます。これは引数が幾つかあるのですが、もっとも簡単な使い方は、リダイレクト先のアドレスを渡すだけです。
$this->redirect( アドレス );これで、指定のアドレスにリダイレクトします。アドレスさえ正確に指定すれば、どのサイトのどのページにもリダイレクトできます。ただし、見ればわかるようにアドレスバーに表示されるアドレスもリダイレクト先のものが表示されますから、利用者には明らかに「なんか別のページに飛ばされたな」というのがわかる形のリダイレクトですね。
もし、密かに別のアクションに処理を送りたければ、別のやり方も可能です。これはリダイレクトではなく「フォワード(サーバー内で別アドレスの内容を結果として出力する)」という操作になります。
$this->setAction( アクション名 );引数にアクション名を指定すると、そのコントローラー内にある指定のアクションにフォワードされます。下のサンプルで、indexアクションのredirectをsetActionに変えて実行してみましょう。Webブラウザに表示されるアドレスは/indexのままですが、表示される内容は/otherに変わっています。利用者からは、それが別のアクションの表示だとはまったくわかりません。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※一般的なリダイレクト <?php App::uses('AppController', 'Controller'); class SampleController extends AppController { public function index() { $this -> autoRender = false; $this->redirect("./other/"); } public function other(){ $this -> autoRender = false; echo "<html><head></head><body>"; echo "<h1>サンプルページ</h1>"; echo "<p>これはもう1つのページです。</p>"; echo "</body></html>"; } } ※別のアクションへのフォワード public function index() { $this -> autoRender = false; $this->setAction("other"); }
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る