cakephp3でフォームに確認画面を用意する(どのようにしてvalidationを適用するか?)
こんばんは。「がの」です。
最近cakephp3を触ってます。
今回の記事は
validationについてです。
確認画面を要するフォーム作成時に
validationで少し躓いたので、
その備忘録を書きます。
ーーーー【達成したかったこと】ーーーー
(1)フォームに入力した項目を
TableのvalidationDefaultでチェックしたい。
(2)入力後、確認画面を表示した上で、
データを保存する。
(3)bakeで生成されるaddアクションを
見ると $this->Table->save($entity)で
validationDefaultが発動しているが、
saveの手前の「確認画面表示」の時に、
validationを行いたい。
ーーーーーーーーーーーーーーーーーーー
cakephp2での記述の仕方は
ググれば色々書いてあるのですが、
cakephp3は記事が少なく、
最初よく分かりませんでした。
調べていて分かったことは、
”cakephp3では、INSERTを行う際に、
2度validationをかけている"
ということです。
2回というのは、
それぞれ以下になります。
ーーーーーーーーーーーーーーーーーーー
[1回目]
$entity = $this->Table->newEntity($postParams)
で、newEntityを作る時。
[2回目] 前述の通り
$this->Table->save($entity) の時
ーーーーーーーーーーーーーーーーーーー
通常どおり、プログラムを実行すると、
newEntityの時にvalidationをかけていることは
気づきません。。。
エラーが発生しても、
何の反応やメッセージもなく、
そのままコードを実行するからです。
達成したい内容は、
newEntityの時のvalidationの結果を踏まえて、
エラーが無ければ確認画面へ、、、
エラーが有れば入力画面でエラー表示
とすれば良いでしょう。
肝心のnewEntityの時のvalidation結果は、
$entity->errors()で取得可能です。
errors()が空であれば
確認画面に飛ばせば良いでしょう。
また、validationで指定した
エラーメッセージがerrors()の中に
格納されているので、
errors()が空ではない場合は、
そのままTemplateに渡して、
メッセージを表示させればよいでしょう。
書いたコードは
気が向いたら載せます^^;
以上、
「がの」がお送りしました(^o^)/