ブロックチェーンに詳しいフリーのエンジニアのIT備忘録

ブロックチェーンに魅了されフリーのITエンジニアに転身した元暗号理論研究者のブログです。

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^)/