PHP

【CakePHP3】FormHelperとBootstrapを使ってフォームを作る

CakePHP3の便利な機能である『FormHelper』

他のフレームワークにもある機能で、面倒なHTMLの記述もしなくていいですし、CSRF対策も勝手にやってくれます。

ですが細かいカスタマイズをしようとすると、FormHelperのリファレンスをしっかり読まなければいけませんし、最初は大変ですよね。

というわけで今回は簡単にBootstrapを使ったフォームをCakePHPでも使えるようにやり方を説明していこうと思います。

FormHelperの使い方をおさらい

FormHelperとは、コードを書くのが面倒なフォーム をすばやく簡単に作成するための機能。

・フォーム の検証(バリデーション)

・フォームのレイアウト、デザイン

などが簡単に設定できるようになる。

使い方

FormHelper::create(mixed $context=null, array $options = [])

細かい設定は$options配列で行う

$option配列には以下のようなキーと値を入れることができる。

type : get, file,post,put,delete,patchなど。作成するフォームの種類を選ぶ。フォームのmethodも自動的に設定してくれる

method : 値はtypeと同じ。typeでもmethodを設定できるが、こちらは明示的にフォームのmethodを設定する。

template: フォームで使うタグに自由に<div>などのタグで囲ったり、タグ自身にclassやstyleなどを追加できる。

FormHelperを使って自由自在にフォームをカスタマイズするには、templateを使うと簡単にできます。

詳しいことはCakePHP3のcookbookをみましょう。

https://book.cakephp.org/3.0/ja/views/helpers/form.html

実際にフォームを使ってみる

フォームをカスタマイズには、先ほど紹介した$option配列にtemplateを追加する方法が一番わかりやすくてオススメです。

サンプルコード

ごく普通のログイン画面で使われてるような、ユーザー名とパスワード、そしてログインボタンだけのフォームを作成してみました。

実際にコードを書いてみると、

こんな感じになります。

$userAuthはバリデーションのために勝手に自分が作ったものを使っているだけなので、気にする必要はありません。

サンプルコードの解説

フォームはこんな感じです。

普通にBootstrapを使用した綺麗なフォームになりましたね。

コードを解説していくと、

From::create()の$option配列で使用するtemplateに与える配列$form_templateを作ります。

例えば$form_templateの’input’の場合、何もしなければ普通の<input>タグだけが生成されるのですが、

<input class=”form-control”>とすることでBootstrapのCSSを適用することができます。

これと同じ要領でlabelやbuttonにもBootstrapを適用することができます。

あとはいつもFormHelperを使っているようにForm::control()やForm::button()を呼んであげればいいだけです。

作成したフォームの値を受け取る方法

フォームを作成したあとは簡単で、いつもどおりに値を受け取ってやればいいだけなのですが、

一応サンプルコードを作ってみました。

簡単ですね。

request->is(‘post’)で、フォームから送られてきたのかどうかを判定しています。

usernameを受け取りたい場合getData()で取得した配列$dataから、$data[‘username’]のようにすれば値を取得できます。

FormHelperを使っているので、特に変な設定をいじっていなければCSRF対策をしてくれますし、

モデルやFormクラスを使ってバリデーションもすれば、生PHPやHTMLでフォームを作るよりも圧倒的に簡単にBootstrapを使うことができます。

意外と使えるフォームをカスタマイズする他の方法

実は、FormHelperの利点だけを享受してFormHelperの面倒な制約に縛られない方法もあります。

それは、

Formの生成や値の受け取りだけはFormHelperに任せて、細かいカスタマイズが必要なタグはHTMLで直書きする

という方法なのですが、

詳しくは

【CakePHP3】チェックボックスを横並びにする簡単な方法今回は、FormHelperを使ったことのある人なら経験することが多いと思うのですが 『チェックボックス』を横並びに表示するための...

で説明しているので、よかったらこちらの方も読んでみてください。

最後まで読んでいただき、ありがとうございました。