DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人のデベロッパーズブログ > 
  3. CakePHP3 でテーブル不使用フォームのバリデーション

加藤 正人のデベロッパーズブログ

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。

加藤 正人

2017/01/20

CakePHP3 でテーブル不使用フォームのバリデーション

 

CakePHP 2.x では、モデルにテーブルを結び付けない (public $useTable = false;) で利用することができた。(テーブルレスモデル)

これを利用してデータベースにデータを保存しないフォーム、例えば問い合わせフォームのようなものの入力内容のバリデーションを行なう手法がよく使われた。

ところが CakePHP 3.x では Model は実体としては Table クラスで実現されており、実テーブルとの対応付けが必須で「テーブルレステーブル」のようなものはできない。

で、いろいろ調べていたら CakePHP 3.x の公式 Cookbook の左カラムに「Modelless Forms (モデルのないフォーム)」という見出しがあるのに気付いた。

CakePHP 3.x では「フォーム」は独立した機能として定義されているようだ。大まかな使い方は以下の通り。

  1. src フォルダの直下に Form フォルダを作成する (Controller フォルダや Model フォルダの兄弟フォルダ)。デフォルトのインストール作業では作成されないので自分で追加する。
  2. Form フォルダ配下にフォーム定義ファイル、例えば ContactForm.php を作成する。命名規則により、名称は ~Form.php とする。
  3. ContactForm.php では ContactForm クラスを App\Form クラスの拡張して定義し、バリデーションルールを記述する。
  4. コントローラー側で利用する際には new 演算子で $form = new  ContactForm(); のようにして当該 クラスのオブジェクトを生成し、バリデーションは $form->execute($this->request-.data) のようにする。バリデーションが成功した場合は execute() は true を、そうでない場合は false を返す。

なお、バリデーション成功時にフォーム固有の動作をさせたい場合は ContactForm クラスで _execute() プロテクテッドメソッドを定義することで対応することも可能。

関連タグ: Form  CakePHP3 

関連エントリー

CakePHP3 のリダイレクトがうまく行かない例

PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)

CakePHP3 のユーザー定義ファインダーのオプション

PHP3 でデバグモードを一旦無効化した後再度有効化するとDebugKit が見つからない

CakePHP3 で JSON 応答のための定番処理

CakePHP3 でタイムゾーン変換

バージョンを指定して CakePHP をインストールする

CakePHP サイトの移転時の注意

CakePHP3 のアソシエーションで、紐づけ用フィールドを指定する

CakePHP3 のコマンドライン実行

CakePHP3 の Virtual Field と accessor (Getter)

CSRF token mismatch

2019/07/04
CSRF token mismatch

CakePHP3 で created と modified に日付が自動付与されない場合のメモ

CakePHP3 で

CakePHP3 の JSON 出力でエラー

CakePHP3 のミューテータで書き換えたデータが保存されない件

CakePHP3.6.2 のタイムスタンプ調整 (XSERVER の場合)

CakePHP3 で DebugKit が表示されない

最新版 composer.phar のインストール

PHP 7.x で CakePHP 3.x を使う

Remi's PHP5.6 と intl モジュール

X2 と CakePHP 3.x

2017/05/23
X2 と CakePHP 3.x

CakePHP3 の便利機能

CakePHP3 と SQLite

2017/02/20
CakePHP3 と SQLite

CakePHP3 のファインダーメソッド

CakePHP 3.x の accessor と mutator 【その2】

CakePHP 3.x の accessor と mutator

XSERVER X10 に CakePHP 3.x をインストールする

XSERVER で CakePHP 3.x が Fatal error

CakePHP 3.x インストールメモ

Composer メモ

2015/06/13
Composer メモ