1

必須フィールドのいくつかに適切に入力したにもかかわらず、無効なフィールドだけでなくすべてのエラーを受け取り続ける理由がわかりません。

提出物管理者:

public function submit() {
    $this->set('title_for_layout', 'Submit - ');

    if ($this->request->is('ajax')) {
        if (!empty($this->request->data)) {
            $this->Submission->set($this->request->data);
            if ($this->Submission->invalidFields($this->request->data)) {
                $formErrors = $this->Submission->validationErrors;
            } else {
                $formErrors = null;
            }
        } else {
            $formErrors = null;
        }

        $this->set(compact('formErrors'));

}

/Submissions/json/submit.ctp:

<?php

$toReturn = array(
    'formErrors' => $formErrors
);

echo json_encode($toReturn);

提出モデル:

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'
        )
    )
);

シリアル化されて送信されるフォーム値:

フォーム値

json 応答で得られるエラー:

ここに画像の説明を入力

ここで髪を引っ張ります :|

4

2 に答える 2

1

あなたはvalidates()とinvalidFields()で少し混乱しているようです

invalidFields()は、validates()の後に無効なフィールドを返します。http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.htmlを参照してください

したがって、コードは次のようになります。

$this->Submission->set($this->request->data);
if (!$this->Submission->validates()) {
    $formErrors = $this->Submission->invalidFields();
} else {
    $formErrors = null;
}
于 2012-08-08T10:31:20.770 に答える