モデル内の送信を検証するためのすべてのルールを含む validate() 配列から実際のメッセージを取得する方法を見つけようとしています。
基本的に私は ajaxily を投稿しており、検証に失敗したすべてのエラー メッセージをフォームに返したいのですが、検証に合格した場合でも送信しています。
だから私の中で
SubmissionsController
私はこれをやっています:
if ($this->request->is('ajax')) {
$formData = $this->Submission->invalidFields();
$this->set(compact('formData'));
}
私のSubmission
モデルには次のものがあります。
var $validate = array(
'title' => array(
'title' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please enter a title'
),
'minLength' => array(
'rule' => array('minLength', 5),
'message' => 'Please make your title longer (e.g. IJL John F. Kennedy donated his presidential salary to charity)'
),
'maxLength' => array(
'rule' => array('maxLength', 300),
'message' => 'Your title needs to be shorter'
),
),
'description' => array(
'shortDescription' => array(
'rule' => array('shortDescription'),
'message' => 'Your description needs to be longer'
),
'longDescription' => array(
'rule' => array('longDescription'),
'message' => 'Your description needs to be shorter'
),
),
'source' => array(
'source' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Enter a valid source URL (e.g. http://en.wikipedia.org/wiki/Penguins)'
),
'website' => array(
'rule' => 'url',
'message' => 'Enter a valid source URL (e.g. http://en.wikipedia.org/wiki/Penguins)'
),
),
'category' => array(
'category' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false,
'message' => 'Please choose a category'
)
)
);
私のSubmissions/json/submit.ctp
ファイルには次のものがあります。
<?php
$fragment = $this->element('errors/flash_error');
$toReturn = array(
'formData' => $formData
);
echo json_encode($toReturn);
有効なタイトルまたはその他の有効なフィールドを入力すると、何も表示されずにエラー メッセージが表示されます。
invalidFields()
検証に合格したフィールドを返さないために必要なものが不足していますか?
編集:
Leo が以下で提案したように、以前は save を呼び出していませんでしたinvalidFields()
正しいコードは次のとおりです。
if ($this->Submission->save($this->request->data)) {
$formData = null;
} else {
$formData = $this->Submission->invalidFields();
}
$this->set(compact('formData'));