カテゴリー
コンピューター

【CakePHP2】URL で2つ以上のクエリパラメーターを設定してアクションに渡す方法

ポイント

  • 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 などのデフォルト値を設定することがポイントとなりますわね。

スクリーンショット 2014-10-09 20.15.20.png

お試しその2。失敗><

クエリパラメータを複数設定し、一見よさそうなのですけれども。。。

http://192.168.56.112/cake5/tests/1/2/3

コントローラーのアクションを指定いたしませんとエラーとなりました><。index アクションであっても省略ができないことがポイントですの!

スクリーンショット 2014-10-09 20.18.55.png

お試しその3。成功!

以上2つの失敗を踏まえ、とうとう成功しましたの♪

http://192.168.56.112/cake5/tests/index/1/2/3

URL でコントローラーとアクションを指定してクエリパラメータをスラッシュ「/」で区切って指定すると、コントローラーのアクション側に送られて、設定した引数 $first、$second、 $third で受け取ることができました♪

スクリーンショット 2014-10-09 20.20.04.png

おわりに

今回の疑問を抱いてから、調べるのにすこし苦労いたしました。

実は公式ページに複数引数の例があるのですけれども、使い方までは言及しておりませんでしたの。

Google でいろいろ調べてみましたが、「cakephp アクション 2つ引数」「cakephp get 2つのパラメータ」「cakephp ルーティング 2つのパラメータ」「cakephp 2つのパラメータ」などの検索ワードを試してみましたけれども、ダメでしたわ><。

結局、「cakephp アクション 引数 複数」で次の参考ページにたどり着くことができましたの、ありがとう存じます!

今回の内容、以前も調べていたような気がしますけれども、投稿はしていなかったように存じます。今更ですけれども、実は投稿していたりして。。。うふふ、気にしないことにいたしますわ♪

以上です。

コメントを残す