回答編集履歴

1 save()の時と、newEntity()の時のvalidationを書く場所が違うっぽい

domonr

domonr score 253

2016/05/17 16:35  投稿

上記に記載したサンプルコードではvalidationが呼ばれました。すみません。
上記のコードはteratailにのせる際にいくつか修正しているのですが、その変更箇所が問題だったようです。
validationが呼ばれなかったのは以下のコードの場合でした。
HogesController.php
```php
<?php
namespace App\Controller;
use Cake\ORM\TableRegistry;
class HogesController extends AppController {
    public function index() {
         $hoge = TableRegistry::get('Hoges');
         $entity = $this->createTable($this->request->data);
         $hoge->save($entity);
         debug($hoge->errors());
         exit;
    }
    private function createTeble($data) {
        // $dataをTableEntityに変換して返す処理
    }
}
```
どこかのブログ記事で、newEntity()を読んだタイミングとsave()のタイミングの2回validationが呼ばれると書いてあったのですが、CakePHP3.2ではデフォルトではsave()のタイミングでvalidationは呼ばれず、newEntity()のタイミングでのみ呼ばれるっぽいです(実際に動かしてみての結果なのでコードやドキュメントを見たわけではありません。
どこかのブログ記事で、newEntity()を読んだタイミングとsave()のタイミングの2回validationが呼ばれると書いてあったのですが、CakePHP3.2ではデフォルトではsave()のタイミングでvalidationは呼ばれず、newEntity()のタイミングでのみ呼ばれるっぽいです(実際に動かしてみての結果なのでコードやドキュメントを見たわけではありません。
追記
newEntityの時はvalidationDefaultにvalidationを記述し、
saveの時はbuildRulesを記述するっぽい

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る