コントローラーを使おう! (5/5)
作成:2011-11-02 08:08
更新:2015-08-27 20:09
更新:2015-08-27 20:09
■値を受け渡すには?
今度は、リダイレクトなどで別のページに移るとき、必要な値を受け渡す、ということをやってみましょう。これも、下のリスト欄に簡単なサンプルをあげておきます。
/indexにアクセスすると、そのまま/otherにリダイレクトされますが、このとき、現在の時刻の値をindexからotherへと受け渡しています。スクリプトを見てみれば、時刻の値がindexで用意されていることがわかるはずです。
では、どのようにして値を受け渡しているのか、その仕組みを見てみましょう。まずは値を送り出す側です。これは、こんな感じでリダイレクトのアドレスを設定しています。
こんな具合に、アクションでは、アドレスの後に/で受け渡したい値を記述すれば、それがそのまま アクションメソッドの引数に渡されるようになっています。複数の値を送りたい場合は、1つ1つを/で区切って記述すれば、アクションメソッドの第1引数から順番に値が格納されます。例えばこんな具合です。
もちろん、フォームなどを用意してPOST送信をするようになれば、また違った形で送られたパラメータを処理することになります。今回やったのは、「アドレスにパラメータを追加することで簡単に値を別のアクションに渡せる」ということです。まぁ、現時点ではコントローラーしか作っていませんから、方法が限られている、ということなんですが……。
とりあえず、このように「コントローラーだけでもなんとかなる」ということはわかりました。が、このやり方では、複雑なページはとても作れません。そこで次回は、「ビュー」を使ってみることにしましょう。
/indexにアクセスすると、そのまま/otherにリダイレクトされますが、このとき、現在の時刻の値をindexからotherへと受け渡しています。スクリプトを見てみれば、時刻の値がindexで用意されていることがわかるはずです。
では、どのようにして値を受け渡しているのか、その仕組みを見てみましょう。まずは値を送り出す側です。これは、こんな感じでリダイレクトのアドレスを設定しています。
$this->redirect("./other/" . urlencode($str));/other/の後に、渡したい値をURLエンコードしてつけていることがわかるでしょう。そして受け取る側のotherメソッドでは、
public function other($param){……こんな具合に、引数に$paramという変数が用意されています。これで、/other/の後につけた値が、そのまま引数の$paramに受け渡されるのです。後は、URLデコードして値をページに書き出すだけです。
こんな具合に、アクションでは、アドレスの後に/で受け渡したい値を記述すれば、それがそのまま アクションメソッドの引数に渡されるようになっています。複数の値を送りたい場合は、1つ1つを/で区切って記述すれば、アクションメソッドの第1引数から順番に値が格納されます。例えばこんな具合です。
$this->redirect("./other/abc/xyz/123”);↓
public function other($a, $b, $c){……これで$a = “abc”, $b = “xyz”, $c = “123”というように、各引数にそれぞれのパラメータが保管されます。実に安直で便利ですね。
もちろん、フォームなどを用意してPOST送信をするようになれば、また違った形で送られたパラメータを処理することになります。今回やったのは、「アドレスにパラメータを追加することで簡単に値を別のアクションに渡せる」ということです。まぁ、現時点ではコントローラーしか作っていませんから、方法が限られている、ということなんですが……。
とりあえず、このように「コントローラーだけでもなんとかなる」ということはわかりました。が、このやり方では、複雑なページはとても作れません。そこで次回は、「ビュー」を使ってみることにしましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※パラメータの受け渡し <?php App::uses('AppController', 'Controller'); class SampleController extends AppController { public function index() { $this -> autoRender = false; $date = new DateTime(); $date->setTimeZone(new DateTimeZone('Asia/Tokyo')); $str = $date->format("H:i:s"); $this->redirect("./other/" . urlencode($str)); } public function other($param){ $this -> autoRender = false; $str = urldecode($param); echo "<html><head></head><body>"; echo "<h1>サンプルページ</h1>"; echo "<p>これはもう1つのページです。</p>"; echo "<p>送られた値: " . $str . "</p>"; echo "</body></html>"; } }
※関連コンテンツ
「初心者のためのCakePHP2 プログラミング入門」に戻る