Проблемы с проверкой Cakephp 2.0 - PullRequest
2 голосов
/ 03 января 2012

Я работаю с cakephp 2.0.2. Я сохраняю относительно простую ассоциацию моделей. Рабочая модель с привязкой «один ко многим» к изображениям. Я считаю, что проверка этих двух моделей работает непредсказуемым образом.

Когда я делаю сохранение с совершенно верной формой:

$this->Work->saveAll($this->data);

Я могу получить данные, успешно сохраненные, но когда я звоню:

$this->Work->invalidFields();

На самом деле я вижу неудачные проверки правил рабочей модели, хотя форма не должна была их вызывать.

Array
(
    [title] => Array
        (
            [0] => Please enter a title.
        )

    [copy] => Array
        (
            [0] => Please enter project copy.
        )

)

Экспериментируя с этим дальше. Если я повторно отправлю форму с намеренно оставленным пустым полем заголовка, я получу следующее от моего $this->Work->invalidFields() звонка:

Array
(
    [title] => Array
        (
            [0] => Please enter a title.
            [1] => Please enter a title.
        )

)

Итак, по умолчанию кажется, что правило отображается один раз, независимо от того, действительно ли оно неверно или нет. Опять же, если поле действительно недействительно.

Наконец, для потомков, мои простые правила проверки:

public $validate = array(
    'title' => array(
        'rule' => 'notEmpty',
        'required' => true,
        'message' => 'Please enter a title.'
    ),
    'copy' => array(
        'rule' => 'notEmpty',
        'required' => true,
        'message' => 'Please enter project copy.'
    )
);

Есть идеи по поводу этой странности? Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 05 апреля 2013

Вызов Model-> invalidFields () не сбрасывает ошибки.Если вам нужен массив недопустимых полей, вы можете вместо этого использовать свойство Model-> validationErrors.

Подробнее об этом: https://cakephp.lighthouseapp.com/projects/42648/tickets/2597-model-invalidfields-add-validation-messages-each-time-it-s-called

0 голосов
/ 13 апреля 2013

https://cakephp.lighthouseapp.com/projects/42648/tickets/2597-model-invalidfields-add-validation-messages-each-time-it-s-called

этот ответ от Mark-story:

Да, вот как это работает.Поскольку вы используете методы более низкого уровня, validationErrors не сбрасывается.Вы должны использовать create () + save () для автоматического сброса ошибок.Или, если вы просто хотите получить ошибки, вы должны получить доступ к свойству Models-> validationErrors вместо вызова invalidFields ().

0 голосов
/ 03 января 2012

Вы пытались установить данные в массив данных модели и затем проверить? Я предполагаю, что проверка должна быть вызвана явно. Однако ... вы можете просмотреть класс модели торта в папке lib, чтобы узнать.

$this->Work->data = $data;
if($this->Work->validate()){
    $this->Work->saveAll();
}
...