2012-01-20 2 views
1

Так что я использую CakePHP 2.0.5.CakePHP не проверяет поля

Моя модель:

class User extends AppModel { 
public $name = 'User'; 
public $validate = array(
    'username' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A username is required' 
     ) 
    ));} 

Тогда я на контроллере выполнить это действие он прекрасно работает и дает мне ошибку, потому что имя пользователь поля пустое:

$this->User->create(); 
$this->User->save(array("User"=>array("username"=>""))) 

Но если я передать другое имя поля например:

$this->User->create(); 
$this->User->save(array("User"=>array("something"=>""))) 

он не выполняет проверку на поле имени пользователя и сохраняет пустое на da tabase, даже если я сделал правило в моей модели, что значение имени пользователя не может быть пустым. Итак, где я ошибаюсь?

+0

Поле вашего имени пользователя в вашей базе данных имеет значение по умолчанию? – swiecki

+0

нет нет. –

ответ

2

Согласно this page, оно должно быть:

'rule' => 'notEmpty' 

(обратите внимание на отсутствие массива, окружающего «notEmpty»)

Хотя показано, что путь (выше) в книге CakePHP в несколько мест, лично я люблю делать это так, как это кажется следовать остальные конвенции проверки (и показано во многих местах по всей книге, а):

'allowEmpty' => false, 

Во-вторых, вам нужно понять разницу между «allowEmpty/notEmpty» и «required». Согласно this page:

Разница между обязательным и допустимым вариантом может быть запутанной. 'required' => true означает, что вы не можете сохранить модель без ключа для этого поля, которое присутствует в $ this-> data (проверка выполняется с isset); тогда как «allowEmpty» => false гарантирует, что значение не пустое, как описано выше.

Основной перевод: «требуется» означает, что в любое время, когда вы сохраняете этот элемент, вы ДОЛЖНЫ включать это поле. Хотя «allowEmpty» и т. Д. Означает, что если вы передадите это поле, оно не может быть пустым.

+0

Да, это немного смущает. Но спасибо за ответ, это было полезно. –

+0

@Ed - Рад помочь! (Я согласен - я несколько смутился, когда несколько раз работал с этим). Напоминание. Если любой из ответов помог решить вашу проблему, это хорошая практика отметить это как ответ. – Dave

0

В ваших правилах проверки вам необходимо required => true, это приведет к отказу проверки, если ключ имени пользователя не указан. Я рекомендую связать его с on => create, чтобы он не получился, когда строка создана.

$validate = array(
'username' => array(
    'not-empty' => array(
     'rule' => array('notEmpty'), 
     'message' => 'A username is required', 
     'required' => true, 
     'on' => 'create' 
    ), 

)); 
+0

Спасибо, что он отлично работает :) –

+0

Он отлично работает = примите другой ответ: / – Dunhamzzz

Смежные вопросы