1

メッセージを表示し、検証が真になる前に保存を停止するには、コントローラーに何を追加しますか?

class Rsvp extends AppModel {
var $name = 'Rsvp';
var $validate = array(
                'uname' => array(
                                'rule' => array('alphaNumeric', true),
                                'message' => 'Please enter a vlaid name that does not contain digits'),
                'uemail' => array(
                                'rule' => array('email', true),
                                'message' => 'Please supply a valid email address.')


);

}

コントローラ

public function add() {


    if ($this->request->is('post')) {

        var_dump($this->request->data);
        $this->Rsvp->set('uname', $this->request->data['Post']['name']);
        $this->Rsvp->set('uemail', $this->request->data['Post']['emailaddress']);           
          //Begin Validation Routine
        echo 'Validation';
        var_dump($this->Rsvp->validates);


        $this->Rsvp->save();    
        /*if($this->Rsvp->save()) {
            $this->Session->setFlash('You have RSVP for the event');
           // $this->redirect(array('action' => 'index'));              
        }
        else {
            $this->Session->setFlash('Unable to RSVP you for the event.');
        }*/
    }
}
4

2 に答える 2

2

次のような意味ですか?

if($this->Rsvp->validates()) {
   //data validated, so save
   $this->Rsvp->save($this->data);    
}
else {
   $this->Session->setFlash(__('Fill in all required fields.', true));
}
于 2012-05-03T11:52:04.200 に答える
0

デフォルトでは、Model::save()メソッドは自動的に検証されます。したがって、検証は保存を試みるだけで行われます。

if ($this->request->is('post')) {
  if ($this->Rsvp->save($this->request->data)) {
    // validated and saved to db
  } else {
    // didn't validate or failed saving to db
  }
}

検証したくない場合は、

$this->Rsvp->save($this->request->data, array('validate' => false));

最後に、データを設定してメソッドを実行することにより、手動で検証できますvalidates()

$this->Rsvp->set('uname', $this->request->data['Post']['name']);
$this->Rsvp->set('uemail', $this->request->data['Post']['emailaddress']);
$validates = $this->Rsvp->validates();

検証されない場合は$this->Rsvp->validationErrors、設定されてからコントローラーに設定されます。フォームヘルパーはこれらのエラーを認識し、自動的に表示します。

データの保存とデータ検証の詳細については、http://book.cakephp.org/2.0/en/models/saving-your-data.htmlをご覧ください。

于 2012-05-03T14:48:20.450 に答える