備忘録

webの備忘録のために

CakePHP3 フォームその4

今回はFormヘルパーによるフォームの生成について。 ここまではビューテンプレートにそのままフォームのタグを書いて実行してきたが、 CakePHPにはタグを自動生成する機能が用意されている。

$this->Formの形でインスタンスのメソッドを呼び出す。

そしてフォームの開始タグを生成する形がこれ

create(モデル名,属性指定);

-ファイル src/Template/Hello/index.ctp

<h1>サンプル見出し</h1>
<p>
    <?=$result; ?>
</p>
<?=$this->Form->create(null,['type'=>'post', 
'url'=>['controller'=>'Hello', 'action'=>'index']]) ?>
    <?=$this->Form->text("HelloForm.text1") ?>
    <?=$this->Form->submit("送信") ?>
<?=$this->Form->end(); ?>

モデル名に関しては今回は特にモデルに情報を入れないパターンの紹介なのでnullで。

['type'=>'post', 'url'=>['controller'=>'Hello', 'action'=>'index'] これでtype属性に'post'、url属性に['controller'=>'Hello', 'action'=>'index']が設定される。

入力フィールドに関してはこちら

text(名前);

text(名前,属性指定);

送信ボタンのタグ生成に関してはこちら

submit(キャプション);

submit(キャプション,属性指定);

そして最後にはフォームの終了タグを生成するために

end();

-ファイル src/Template/Hello/send_form.ctp

public function index(){
    $result = "";
    if ($this->request->isPost()){
        $result = "<pre>※送信された情報<br/>";
        foreach($this->request->data['HelloForm'] as $key => $val){
            $result .= $key . ' => ' . $val;
        }
        $result .= "</pre>";
    } else {
        $result  = "※なにか書いて送信してください。";
    }
    $this->set("result", $result);
}

上記のビューテンプレートに関してはhello/indexに送られるようにフォームのactionを指定しているので、 indexメソッドに上記のように記述すればフォームヘルパーを使った形でのフォーム生成は完成する。