コントローラーとビュー (6/6)
作成:2015-08-29 10:13
更新:2015-08-29 10:13
更新:2015-08-29 10:13
■クエリーパラメータについて
$this->requestには、リクエストに関する面白い機能がいろいろと用意されています。その一つ、クエリーパラメータに関する機能を使ってみましょう。
先に、アドレスを指定してパラメータを送る方法について説明しました。例えば、 http://localhost:8765/helo/index/abc/123 というようにすることで、abcと123をパラメータとしてアクションメソッドに送ることができましたね。
このようなパラメータの書き方はとてもスマートですが、多くのサイトでは違う形で値を送ってします。「クエリー文字列」と呼ばれるものを付け足す方法で、例えば、
こんな具合に、アドレスの最後に「~?キー=値&キー=値……」といった形で値を付け足すことで、それぞれの値に名前(キー)を指定して送ることができるわけです。上の例なら、idというパラメータに「123」が、nameパラメータに「taro」が入れられます。これがクエリーパラメータです。
このクエリーパラメータは、$this->requestの「query」メソッドで取り出すことができます。
これで、指定したキーの値を取り出すことができます。実際の利用例を挙げておきましょう。下のリスト欄のようにコントローラーを書き換えて下さい。そして、
こんな感じでアクセスしてみましょう。すると画面に「your id:1001, name:john」とメッセージが表示されます。
ここでは、こんな形でクエリーパラメータを取り出しています。
パラメータがなかった場合、queryの値はnullになります。パラメータが指定されていなかったとしても特にエラーなどにはならないので、必要に応じてqueryした値がnullかどうかチェックして使うとよいでしょう。
先に、アドレスを指定してパラメータを送る方法について説明しました。例えば、 http://localhost:8765/helo/index/abc/123 というようにすることで、abcと123をパラメータとしてアクションメソッドに送ることができましたね。
このようなパラメータの書き方はとてもスマートですが、多くのサイトでは違う形で値を送ってします。「クエリー文字列」と呼ばれるものを付け足す方法で、例えば、
http://localhost:8765/helo/index?id=123&name=taro
こんな具合に、アドレスの最後に「~?キー=値&キー=値……」といった形で値を付け足すことで、それぞれの値に名前(キー)を指定して送ることができるわけです。上の例なら、idというパラメータに「123」が、nameパラメータに「taro」が入れられます。これがクエリーパラメータです。
このクエリーパラメータは、$this->requestの「query」メソッドで取り出すことができます。
$変数 = $this->request->query( キー );
これで、指定したキーの値を取り出すことができます。実際の利用例を挙げておきましょう。下のリスト欄のようにコントローラーを書き換えて下さい。そして、
http://localhost:8765/helo/index?id=1001&name=john
こんな感じでアクセスしてみましょう。すると画面に「your id:1001, name:john」とメッセージが表示されます。
ここでは、こんな形でクエリーパラメータを取り出しています。
$id = $this->request->query('id');
$name = $this->request->query('name');
パラメータがなかった場合、queryの値はnullになります。パラメータが指定されていなかったとしても特にエラーなどにはならないので、必要に応じてqueryした値がnullかどうかチェックして使うとよいでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<?php namespace App\Controller; use App\Controller\AppController; class HeloController extends AppController { public function index() { $id = $this->request->query('id'); $name = $this->request->query('name'); $this->set('message', 'your id:' . $id . ', name:' . $name); } }
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る