2010-06-07 21 views
19

比方說,我有場,看起來像這樣的觀點:如何在默認的其他位置顯示CakePHP輸入驗證錯誤?

<li class="bigfield"> 
    <?php echo $form->input('phone', array(
     'placeholder' => 'Phone', 
     'label' => false, 
     'between' => '<br />' 
)); ?> 
</li> 

如果我對這個領域的驗證規則和驗證失敗,我看到下面的HTML:

<li class="bigfield"> 
    <div class="input text required error"> 
     <br> 
     <input name="data[Appointment][email]" type="text" placeholder="Email" 
      maxlength="45" value="" id="AppointmentEmail" class="form-error"> 
     <div class="error-message">Please enter a valid email address</div> 
    </div> 
</li> 

我我喜歡做一些事情,比如將錯誤消息div移動到頁面的整個不同部分,而不是將其作爲字段本身與<li>相同。這將是最直接的做法嗎?

回答

25

只是更新舊帖子。

的驗證錯誤被自動傳遞到視圖(如@Angel S.莫雷諾指出)

$this->validationErrors 
20

In you controller

$this->set('validationErrorsArray', $this->ModelName->invalidFields()); 

您將有$validationErrorsArray在你的看法。


UPDATE(9月2014):

從視圖

從CakePHP的2.3可以從view訪問驗證錯誤數組:

$this->validationErrors; 

從控制器

如果你試圖將數據保存在控制器中,您可以訪問驗證錯誤是這樣的:

$this->ModelName->validationErrors; 

如果你想保存前驗證數據做這種方式:

$this->ModelName->set($this->request->data); 
if ($this->ModelName->validates()) { 
    $this->ModelName->save(); 
} else { 
    $errors = $this->ModelName->validationErrors; 
    // handle errors 
} 

Validating Data from the Controller

+2

需要注意的是,在CakePHP 2.x中,這個值自動發送到視圖 – 2013-01-20 06:55:01

+1

小心:如果您已經使用save()等來驗證您的數據,那麼這個答案是錯誤的,因爲這將重新驗證它。在你的視圖中使用$ this-> Form-> error()。 – mark 2013-02-23 18:01:02

+0

我被學習了3次,並在很長一段時間內收取3次費用。現在我必須處理兩個項目,它看起來像新的框架。感謝您的回答^ _ ^ – TommyDo 2017-07-25 02:30:11

3

從控制器,你可以使用:

$this->Modelname->validationErrors['TheFieldYouWantToDisplay'] = 'This is not correct' 

你的情況,這將是像這樣在你的控制器:

$this->Appointment->validationErrors['email'] = 'Error message'

這種鱈魚e只是在運行時自定義錯誤消息。但是你也可以在模型中定義$ validate並且像brancer描述它那樣做。

相關問題