コントローラー(Controller)を利用する (4/5)
作成:2015-08-22 09:57
更新:2015-08-22 09:57
更新:2015-08-22 09:57
■URLパラメータを使う
コントローラーの基本がわかったところで、今度は「値をアクションに受け渡す」ということを考えてみましょう。といっても、簡単な表示を作っただけでフォームなどはまだ使っていません。どうするかというと、アクセスする「アドレス」を使うのです。
CakePHPでは、アクセスするアドレスの型式がきっちりと決められていました。ドメインの後にはアプリケーション名とアクション名が付けられていましたね。この更に後に値をつけると、それらがパラメータとしてアクションに渡されるようになっているのです。例えば、
こんな具合にすると、indexアクションに「hello」というパラメータが渡されます。渡された値は、引数を用意して受け取ることができます。これは1つだけでなく、スラッシュを付けていくつも続けて書くことができます。
では、実際にやってみましょう。先ほどのHeloController.phpを下のリスト欄のように書き換えて下さい。そして以下のようにアドレスを指定してアクセスしてみましょう。
アクションを見てみると、メソッド定義の部分に index($a, $b) というように引数が指定されていることがわかります。アドレスのアクション名の後にある/abc/123というパラメータが、そのまま$a, $bに代入されて渡されるようになっているのです。非常に簡単ですね!
ただし、注意したいのは「パラメータがない場合、これらの引数に値は渡されない」という点です。つまり、普通にhttp://localhost:8765/helo/でアクセスすると、$a, $bは空っぽで値がない状態になります。このため、ここでは引数に初期値を指定しておき、引数の値が空でなければ処理を行うようにしています。
引数に初期値の指定がないと、パラメータがない場合、画面に警告が表示されるので、これが嫌な場合は必ず初期値を指定しておくようにしましょう。
CakePHPでは、アクセスするアドレスの型式がきっちりと決められていました。ドメインの後にはアプリケーション名とアクション名が付けられていましたね。この更に後に値をつけると、それらがパラメータとしてアクションに渡されるようになっているのです。例えば、
http://localhost:8765/helo/index/hello
こんな具合にすると、indexアクションに「hello」というパラメータが渡されます。渡された値は、引数を用意して受け取ることができます。これは1つだけでなく、スラッシュを付けていくつも続けて書くことができます。
では、実際にやってみましょう。先ほどのHeloController.phpを下のリスト欄のように書き換えて下さい。そして以下のようにアドレスを指定してアクセスしてみましょう。
http://localhost:8765/helo/index/abc/123すると、表示されるページに「パラメータA: abc, パラメータB: 123」といったテキストが表示されます。アドレスに記述されている /abc/123 といったパラメータが受け渡され表示されていることがわかるでしょう。
アクションを見てみると、メソッド定義の部分に index($a, $b) というように引数が指定されていることがわかります。アドレスのアクション名の後にある/abc/123というパラメータが、そのまま$a, $bに代入されて渡されるようになっているのです。非常に簡単ですね!
ただし、注意したいのは「パラメータがない場合、これらの引数に値は渡されない」という点です。つまり、普通にhttp://localhost:8765/helo/でアクセスすると、$a, $bは空っぽで値がない状態になります。このため、ここでは引数に初期値を指定しておき、引数の値が空でなければ処理を行うようにしています。
引数に初期値の指定がないと、パラメータがない場合、画面に警告が表示されるので、これが嫌な場合は必ず初期値を指定しておくようにしましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<?php namespace App\Controller; use App\Controller\AppController; class HeloController extends AppController { public function index($a = '', $b = '') { $this->autoRender = false; echo "<html><head></head><body>"; echo "<h1>Hello!</h1>"; echo "<p>これは、サンプルで作成したページです。</p><p>"; if ($a == '') { echo " パラメータA: " . $a; } if ($b == '') { echo " パラメータB: " . $b; } echo "</p></body></html>"; } }
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る