質問: $this->Articles->newEntity($this->request->getData()); if ($article->errors()) { echo 'エラー'; } ``` バリデーションルールに適合しない入力がなされた場合、エラーメッセージをhtml5の標準のバリデーションのような形で表示したいのですが、controller側でどのようにかけばよろしいでしょうか。 追記:ちなみにnewEntityが呼ばれたタイミングでバリデーションが走って、バリデーションエラーなら、 ``` if ($article->errors()) { ``` の判定がtrueになると思うのですが、いかがでしょうか。
回答: > > cakephp3でtableクラスにバリデーションを書いたのですが、うまく動きません。 > > > `$article = $this->Articles->newEntity($this->request->getData());`でバリデーションが行われているので、その結果を表示したい場合は、`$this->set(compact(['article']));`として、フォームヘルパーにバリデーション済みのエンティティを渡してください(※)。 ※ フォームヘルパー:`$this->Form->create($article)` もちろん、これはバリデーションがきちんと設定されていて、フォームヘルパーがきちんと書けていればの話です。 よく分からなければ、Bakeでコードを出力したものを見てみると参考になります。 > > `if ($article->errors()) {` の判定がtrueになると思うのですが、いかがでしょうか。 > > > その通りです。 ただ、`newEntity()`や`patchEntity()`、`save()`などでもバリデーションは動くので、あえて`if ($article->errors()) {`で判定する必要はないかもしれません。状況次第ですが...。