web-dev-qa-db-ja.com

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>で内部に配置するのではなく、ページの別の部分全体に移動するようなことをしたいと思います。これを行う最も簡単な方法は何ですか?

20
Nick Messick

古い投稿を更新しています。

検証エラーは自動的にビューに渡されます(@Angel S. Morenoが指摘)。

$this->validationErrors 
27
Kishor Kundan

コントローラー内

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

$validationErrorsArrayあなたの意見で。


UPDATE(2014年9月):

ビューから

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
}

コントローラーからのデータの検証

22
bancer

コントローラから使用できます:

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

あなたの場合、コントローラでは次のようになります:

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

このコードは、オンザフライでカスタムエラーメッセージを作成するためのものです。しかし、モデルで$ validateを定義して、brancerがそれをどのように記述しているかのようにすることもできます。

4
shaw kwok