ポイント
- URL でコントローラーとアクションを指定してクエリパラメータの間をスラッシュ「/」で区切れば複数個のクエリパラメータを設定することが可能
- クエリパラメータが無い場合を想定して、アクションの引数にはデフォルト値を設定するべき
- コントローラーのアクションまで URL に指定しなければならない。たとえ index アクションであっても、クエリパラメータを渡す時は明示的に URL に指定する必要がある
環境♪
- CakePHP 2.5.5
- Apache、MySQL
- CakePHP インストール済み、DB作成済み(今回はDB必要ないですけれども)
- 実践はプロジェクトのルートディレクトリからスタート
実践サンプル作り!
TestController の index アクションに3つのクエリパラメータを渡すサンプルを作成いたします。
CakePHP インストール時から存在する PagesController.php をコピーしてこれをひな形とします。
cp Controller/PagesController.php Controller/TestsController.php vim Controller/TestsController.php
モデルは使用いたしません。また、クエリパラメータが複数渡せるかどうかが目的のため、アクションの中身は単純にクエリパラメータを表示するだけの内容となっております。
<?php App::uses('AppController', 'Controller'); class TestsController extends AppController { /** * This controller does not use a model * * @var array */ public $uses = array(); /** * index * * @return void */ public function index($first, $second, $third) { pr($first); pr($second); pr($third); } }
続いて、エラー回避のためだけの、Tests の index ビューを作成します。ファイルさえあればエラーは発生しませんので、中身が空のファイルを作りました。
mkdir View/Tests/ touch View/Tests/index.ctp
これで完成です!
実際に試してみました!
お試しその1。失敗><
クエリパラメータ無しの場合です。
http://192.168.56.112/cake5/tests/
クエリパラメータを指定しないと逆にエラーとなりました><。$first = null などのデフォルト値を設定することがポイントとなりますわね。
お試しその2。失敗><
クエリパラメータを複数設定し、一見よさそうなのですけれども。。。
http://192.168.56.112/cake5/tests/1/2/3
コントローラーのアクションを指定いたしませんとエラーとなりました><。index アクションであっても省略ができないことがポイントですの!
お試しその3。成功!
以上2つの失敗を踏まえ、とうとう成功しましたの♪
http://192.168.56.112/cake5/tests/index/1/2/3
URL でコントローラーとアクションを指定してクエリパラメータをスラッシュ「/」で区切って指定すると、コントローラーのアクション側に送られて、設定した引数 $first、$second、 $third で受け取ることができました♪
おわりに
今回の疑問を抱いてから、調べるのにすこし苦労いたしました。
実は公式ページに複数引数の例があるのですけれども、使い方までは言及しておりませんでしたの。
Google でいろいろ調べてみましたが、「cakephp アクション 2つ引数」「cakephp get 2つのパラメータ」「cakephp ルーティング 2つのパラメータ」「cakephp 2つのパラメータ」などの検索ワードを試してみましたけれども、ダメでしたわ><。
結局、「cakephp アクション 引数 複数」で次の参考ページにたどり着くことができましたの、ありがとう存じます!
今回の内容、以前も調べていたような気がしますけれども、投稿はしていなかったように存じます。今更ですけれども、実は投稿していたりして。。。うふふ、気にしないことにいたしますわ♪
以上です。