CakePHP не проверяет поля - PullRequest
       7

CakePHP не проверяет поля

1 голос
/ 20 января 2012

Поэтому я использую CakePHP 2.0.5.

Моя модель:

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

Затем я на контроллере выполняю это действие, оно работает нормально и выдает ошибку, поскольку поле username пусто

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

Но если я передаю другое именованное поле, например:

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

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

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Согласно этой странице , оно должно быть:

'rule' => 'notEmpty'

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

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

'allowEmpty' => false,

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

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

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

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

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

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

));
...