2012-02-01 6 views
0

私はこれをtrueまたはfalseを返すStudentモデルのbeforeSaveメソッドを持っています。 StudentControllerのすべての保存エラーの標準メッセージを表示する代わりに(あなたの入場を保存できませんでした。もう一度やり直してください)、StudentモデルのbeforeSave mtdがfalseを返すときに別のエラーメッセージを表示します。どうやってやるの?cakephp:モデルのbeforeSaveメソッドがfalseを返すときにコントローラにエラーメッセージを表示しますか?

StudentsController

function add(){ 
if ($this->Student->saveAll($this->data)){ 
$this->Session->setFlash('Your child\'s admission has been received. We will send you an email shortly.'); 
}else{ 
$this->Session->setFlash(__('Your admission could not be saved. Please, try again.', true)); 
    } 
} 
+0

*あなたの 'beforeSave'は' false'を返しますか? – deceze

+0

beforeSaveは、重複レコードがdbテーブルに挿入されないようにするためにfalseを返します。 – vaanipala

+4

その後、 'beforeFilter'アクションの代わりに自動エラーメッセージを使って、それを正規の検証ルールとして実装できるはずです。これにより、通常の素晴らしいエラーメッセージが生成されます。 – deceze

答えて

2

私は検証ルールを実装して、呼び出し提案:CakePHPの

データの検証にまで読む
if ($this->Model->validates()) { 
    save 
} else { 
    error message/redirect 
} 

+0

さて、私はデータのバリデーションを読み、あなたに連絡します。ありがとう。 – vaanipala

0

Decezeとチャップマンは正しかったです。私はcakephp cookbookのDAta検証の章からこの解決策を見つけました。ありがとう、たくさんの人。

次は私が追加した検証ルールです:

スチューデントの名前のために学生モデルに:

var $validate=array(
     'name'=>array(
       'nameRule1'=>array(
        'rule'=>array('minLength',3), 
        'required'=>true, 
        'allowEmpty'=>false, 
        'message'=>'Name is required!' 
        ), 
       'nameRule2'=>array(
         'rule'=>'isUnique', 
         'message'=>'Student name with the same parent name already exist!' 
        ) 
       ), 

次にStudentsControllerの中で機能を追加します。

//checking to see if parent already exist in merry_parents table when siblings or twin are admitted. 
      $merry_parent_id=$this->Student->MerryParent->getMerryParentId($this->data['MerryParent']['email']); 
      if (isset($merry_parent_id)){ 
       $this->data['Student']['merry_parent_id']=intval($merry_parent_id); 
       var_dump($this->data['Student']['merry_parent_id']); 
       if ($this->Student->save($this->data)){ 
       //data is saved only to Students table and not merry_parents table. 
        $this->Session->setFlash(__('Your child\'s admission has been received. 
             We will send you an email shortly.',true)); 
       }else 
         $this->Session->setFlash(__('Your admission could not be saved. Please, try again.',true)); 
      }else{//New record. So, data is saved to Students table and merry_parents table. 
         if ($this->Student->saveAll($this->data)){ //save to students table and merry_parents table 
         $this->Session->setFlash(__('Your child\'s admission has been received. 
                  We will send you an email shortly.',true)); 
         }else 
          $this->Session->setFlash(__('Your admission could not be saved. Please, try again.', true)); 
       }//new record end if 

必要はありませんでした私がChapmanが述べたように保存せずにデータを検証することができます。だから、私は使用しませんでした:

if ($this->Model->validates()) {   
    save   
} else {   
    error message/redirect   
}  
関連する問題