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