DEVELOPERS BLOGデベロッパーズブログ
- HOME >
- 加藤 正人のデベロッパーズブログ >
- CakePHP3 でテーブル不使用フォームのバリデーション
加藤 正人のデベロッパーズブログ
- 氏名
- 加藤 正人
- 役職
- 多分SE
- 血液型
- 秘密
- 出没
- 美味しいもののあるところ
- 特色
- タヒチ大好き。ちょいメタボ。
- 2020/12/15
- CakePHP3 のリダイレクトがうまく行かない例
- 2020/11/12
- Apache Bench
- 2020/10/05
- PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)
CakePHP 2.x では、モデルにテーブルを結び付けない (public $useTable = false;) で利用することができた。(テーブルレスモデル)
これを利用してデータベースにデータを保存しないフォーム、例えば問い合わせフォームのようなものの入力内容のバリデーションを行なう手法がよく使われた。
ところが CakePHP 3.x では Model は実体としては Table クラスで実現されており、実テーブルとの対応付けが必須で「テーブルレステーブル」のようなものはできない。
で、いろいろ調べていたら CakePHP 3.x の公式 Cookbook の左カラムに「Modelless Forms (モデルのないフォーム)」という見出しがあるのに気付いた。
CakePHP 3.x では「フォーム」は独立した機能として定義されているようだ。大まかな使い方は以下の通り。
- src フォルダの直下に Form フォルダを作成する (Controller フォルダや Model フォルダの兄弟フォルダ)。デフォルトのインストール作業では作成されないので自分で追加する。
- Form フォルダ配下にフォーム定義ファイル、例えば ContactForm.php を作成する。命名規則により、名称は ~Form.php とする。
- ContactForm.php では ContactForm クラスを App\Form クラスの拡張して定義し、バリデーションルールを記述する。
- コントローラー側で利用する際には new 演算子で $form = new ContactForm(); のようにして当該 クラスのオブジェクトを生成し、バリデーションは $form->execute($this->request-.data) のようにする。バリデーションが成功した場合は execute() は true を、そうでない場合は false を返す。
なお、バリデーション成功時にフォーム固有の動作をさせたい場合は ContactForm クラスで _execute() プロテクテッドメソッドを定義することで対応することも可能。
2020/12/15
2020/11/12
2020/10/05
2020/09/11
2020/08/03