Home > CakePHP | PHP > CakePHP Model#save()内でvalidates()を呼ばない

CakePHP Model#save()内でvalidates()を呼ばない

この記事の所要時間: 11

ref: CakePHPの何か-CakePHPのModelを使う

お馴染みyandoさんのプレゼン資料で気になったソースがあったので勝手に添削w。

35p:Validation設定例

<?php
class UsersController extends AppController {
  function fuga(){
    $data&#91;'User'&#93; = array(
      'login_id' => '+*+*+*+*',
      'password' => 'abcde',
      'name' => ''
      );
      if ($this->User->validates($data)) {
        $this->User->save($data);
      } else {
        $this->validateErrors($this->User);
      }
   }
}
?>

User#save()の部分ですが、Model#save()メソッド内ではModel#validates()が呼ばれるので、このままだとUser#validates()が2度実行されることになります。

このソースのようにsave()の前にvalidates()を実行するならsave()の第2引数にfalseを渡します。これならsave()内でvalidates()は実行されません。

<?php
      if ($this->User->validates($data)) {
        // validates()はsave()内では呼ばれない
        $this->User->save($data, false);
      }
?>

あとこの例のようにController#validationErrorsを参照しないのなら、Controller#validateErrors()は呼ばなくても良いです。

なので↓のようにシンプルに書けたりします。

<?php
class UsersController extends AppController {
  function fuga(){
    $data&#91;'User'&#93; = array(
      'login_id' => '+*+*+*+*',
      'password' => 'abcde',
      'name' => ''
      );
      $this->User->save($data);
   }
}
?>

まあ実際は登録完了後はリダイレクトしたりビューテンプレートを変えたりするので結局上のソースのようになるのですが。;-)

Pocket

follow us in feedly

コメント (Close):2

yando 07-04-04 (水) 1:30

添削ありがとうございますー。

ぱっとみてイメージを伝える為にソースは結構判定とかはしょってます。
なので2回validateしてる自覚はありました。
(まぁ成功時の判定を2回通ってもクリティカルじゃないだろう・・・と)

ただsaveするだけのソースで暗黙的にvalidateする例と
並べる形の構成にしたほうが良かったかもです。
勉強になりました。

shinbara 07-04-04 (水) 10:56

> ぱっとみてイメージを伝える為にソースは結構判定とかはしょってます。
ですよね。
プレゼン用のソースに突っ込むのもどうかwと思いつつ気になったので書いてみました。;-)

私も普段はvalidates()してからsave()を呼ぶのですが、save()内のvalidates()呼び出しを無効化するのにソースを確認した事があったんで。

トラックバック:1

このエントリーのトラックバックURL
/blog/2007/04/cakephp_save_validates.html/trackback
Listed below are links to weblogs that reference
CakePHP Model#save()内でvalidates()を呼ばない from Shin x blog
pingback from CakePHPのお勉強(#020) « kichon's blog 10-12-16 (木) 18:37

[…] http ://cakephp.hamazo.tv/e1577376.html http://blog.ecworks.jp/archives/792 http://www.1×1.jp/blog/2007/04/cakephp_save_validates.html さて、次はもうちょっとプロフィールページを充実させていったり […]

Home > CakePHP | PHP > CakePHP Model#save()内でvalidates()を呼ばない

検索
フィード
メタ情報

Return to page top