コントローラー(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 プログラミング入門」に戻る