libro
www.tuyano.com
初心者のためのCakePHP2 プログラミング入門

コントローラーを使おう! (5/5)

作成:2011-11-02 08:08
更新:2015-08-27 20:09

■値を受け渡すには?

今度は、リダイレクトなどで別のページに移るとき、必要な値を受け渡す、ということをやってみましょう。これも、下のリスト欄に簡単なサンプルをあげておきます。

/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送信をするようになれば、また違った形で送られたパラメータを処理することになります。今回やったのは、「アドレスにパラメータを追加することで簡単に値を別のアクションに渡せる」ということです。まぁ、現時点ではコントローラーしか作っていませんから、方法が限られている、ということなんですが……。

とりあえず、このように「コントローラーだけでもなんとかなる」ということはわかりました。が、このやり方では、複雑なページはとても作れません。そこで次回は、「ビュー」を使ってみることにしましょう。

※プログラムリストが表示されない場合

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&#58;i&#58;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 プログラミング入門」に戻る