しょぼしょぼプログラマ雑記

自分のための備忘録。 開発記録など掲載してます。 質問・ご意見・ご感想等はTwitter ( https://twitter.com/yun_hokuto ) までお気軽にどうぞ。

CakePHP3(RC2)でControllerからValidateをかける方法

CakePHP2では下記のようなページが用意されていましたが、CakePHP3では見かけられませんでした。

Validating Data from the Controller — CakePHP Cookbook 2.x documentation

なので、手探りでやってみた結果を記述してみたいと思います。

とりあえずUsersテーブルを作成し、bake(bashでコントローラーやテンプレート、モデル内のエンティティとテーブルを自動作成するもの)をします。

そうすると、UsersController.phpにあるaddメソッドには下記のようなことが記述されて居るかと思います。

<?php

$user= $this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
  // 保存成功時
} else {
  // 保存失敗時
}

実はこれ、どうも「patchEntity」の時点でバリデートが行われているみたいです

具体的には、戻り値の「$user」の中身をdebugで出力してみればわかりますが

「errors」という配列が中にあり、この中身がバリデート結果です。

なので、$users->errors配列を参照して、中身が空ならバリデートが通っているというわけですね。

そのため、Controller内でのチェックは下記のような感じになるでしょうか?

<?php

$user= $this->Users->patchEntity($user, $this->request->data);
if(!empty($user->errors())) {
  $this->Flash->error('バリデーションエラー');
} else {
  if ($this->Users->save($user)) {
    // 保存成功時
  } else {
    // 保存失敗時
  }
}

現時点では日本語情報も少なく、公式は英語のみですので調べづらいと思いますが

CakePHP2を弄っていた方でしたら、Model周りとCell周りが結構異なるだけで

すんなり行けるかと思います。

CakePHPって何?どういうもの?」という方はコチラ

このリンク先のジョークが通じる方いるのかな・・・