2012-01-27 2 views
4

Я пытаюсь использовать проверку CakePHP без использования save(). Но он всегда возвращает ошибки. Я вставляю текст, но проверка говорит, что он пуст. Зачем?cakephp validate without 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". 
} 
+0

Попробуйте мое решение, поскольку оно сработало для меня. – Vins

ответ

2

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

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

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

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

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

+0

$ this-> data - все данные получают из почтового метода – lolalola

+0

Я добавляю этот «$ this-> User-> set ($ this-> data);», но это те же проблемы. – lolalola

+0

да, конечно. как я только что сказал, массив должен содержать все «необходимые» ключи (что, вероятно, не делает).поэтому вы должны отбросить эти строки в своих валидных массивах. – mark

10

В обоих CakePHP 2.0 и CakePHP 1.3

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

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

$this->ModelName->set($this->data); 
if ($this->ModelName->validates()) { 
    // Data Validated 
} else { 
    // Data Not Validated 
} 
1

На аналогичную ноту, in CakePHP 2.0 Model, есть возможность для проверки только на SaveAll().

Validate: Установите ложь, чтобы отключить проверку, правда, чтобы проверить каждую запись перед сохранением, «первым», чтобы проверить все записи до того, как будут сохранены (по умолчанию), или «только», чтобы проверить только запись, но не спаси их.

0

Все выглядит нормально. Убедитесь, что в окне вы создали форму, как это, если вы используете метод CakePHP для создания образует

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

Здесь «Admin» это название модели.

0

Присвоить

$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, 
     ... 
    ) 

Знаете ли вы, что это всегда даст вам ошибку. Поскольку он ищет строку и найденный массив.