CakePHP проверить без сохранения () - PullRequest
4 голосов
/ 27 января 2012

Я пытаюсь использовать проверку CakePHP без использования save().Но это всегда возвращает ошибки.Я вставляю текст, но проверка говорит, что он пуст.Почему?

Моя модель:

var $validate = array(
    'm_subject' => array(           
        'empty' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Subject is empty',
        )
    ),
    'm_text' => array(
        'empty' => array(
            'rule' => 'notEmpty',
            'required' => true,
            'allowEmpty' => false,
            'message' => 'Text is empty',
        )
    )
);

В моем контроллере:

$this->Admin->set($this->data);
if($this->Admin->validates($this->data, array('m_subject', 'm_text'))) {
    //OK
}
else {          
    $errors = $this->Admin->invalidFields();
    pr($errors); //Always returns "Subject is empty" and "Text is empty".
}

Ответы [ 5 ]

10 голосов
/ 29 января 2012

В обоих CakePHP 2.0 и CakePHP 1.3

$this->ModelName->validates(); не принимает массив данных, если вы передаете что-либо validates(), это массив опций, которые затем обрабатываются modelCallback beforeValidates()

Вместо этого попробуйте эту логику, если вы хотите определить, действительны ли данные:

$this->ModelName->set($this->data);
if ($this->ModelName->validates()) {
    // Data Validated
} else {
    // Data Not Validated
}
2 голосов
/ 27 января 2012

это потому, что вы не должны использовать обязательные в этом контексте. в противном случае эти поля должны присутствовать в $ this-> data.

прочитайте часть об этом здесь: http://www.dereuromark.de/2010/09/21/saving-model-data-and-security/

О, теперь я вижу проблему. вы используете validates () неправильно! сначала нужно установить данные:

$this->User->set($this->data);
$res = $this->User->validates();

но это довольно хорошо задокументировано ...

1 голос
/ 03 мая 2012

На аналогичной заметке в CakePHP 2.0 Model , есть опция для проверки только на saveAll ().

validate: установите значение false, чтобы отключить проверку, true для проверки каждой записи перед сохранением, «first» для проверки всех записей перед сохранением (по умолчанию) или «only» только для проверки записей, но не для их сохранения.

0 голосов
/ 22 августа 2012

Назначить

$this->data['ModelName']['m_subject'] = $this->data['ModelName']['m_subject']['name']
$this->data['ModelName']['m_text'] = $this->data['ModelName']['m_text']['name']

Потому что

Поскольку загрузка файла - это всегда массив, и он будет выглядеть следующим образом.

 'm_subject' => array(
        'name' => 'foobar',
        'size' => 1234567,
        'error' => 0,
        ...
     )

Так что это всегда даст вам ошибку. Как ищет строку и найденный массив.

0 голосов
/ 06 августа 2012

Все выглядит хорошо.Убедитесь, что вы создали такую ​​форму, если вы используете метод cakephp для создания формы

<?php echo $this->Form->create("Admin"); ?>

Здесь «Admin» - это Имя модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...