libro
www.tuyano.com
初心者のためのCakePHP3 プログラミング入門

コントローラー(Controller)を利用する (4/5)

作成:2015-08-22 09:57
更新:2015-08-22 09:57

■URLパラメータを使う

コントローラーの基本がわかったところで、今度は「値をアクションに受け渡す」ということを考えてみましょう。といっても、簡単な表示を作っただけでフォームなどはまだ使っていません。どうするかというと、アクセスする「アドレス」を使うのです。

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は空っぽで値がない状態になります。このため、ここでは引数に初期値を指定しておき、引数の値が空でなければ処理を行うようにしています。

引数に初期値の指定がないと、パラメータがない場合、画面に警告が表示されるので、これが嫌な場合は必ず初期値を指定しておくようにしましょう。

※プログラムリストが表示されない場合

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