Cake PHP Validation не происходит - PullRequest
0 голосов
/ 25 января 2012

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

 class User extends AppModel {
            public $name = "Users";
            public $validate = array ( 
                    'birth_dt' => array ( 'rule' => 'date',
                    'required' => true,
                    'allowEmpty' => false,
                    'message' => 'Please Give valid date' ));


    }

Я ожидал сообщение об ошибке, когда я предоставляю неверные данные в поле birth_dt. Но в случае неправильных данных ошибок нет, ошибка в том, что данные не сохраняются в базе данных. Если я даю действительные данные, то данные также не сохраняются. Если я удаляю часть проверки, то данные сохраняются в базе данных. Это происходит не только на дату, это происходит и для других полей, таких как буквенно-цифровой адрес, адрес электронной почты, который я использовал в своей форме. Любой, пожалуйста, расскажите, что я сделал не так.

Это код моего контроллера,

<?php
class UsersController extends AppController{
        var $name = 'Users';
        var $uses = array('User','Dob');
        var $helpers = array('Form');

        function index() {
                if ($this->request->is('post')) {
                        if ($this->request->data) {
                                $this->User->save ( $this->request->data );
                                $this->Session->setFlash("User Added!");
                                $this->redirect('/users');
                        }

        }

}

Ответы [ 5 ]

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

Может быть несколько возможных проблем. Попробуйте следующее.

  1. Перед сохранением пользователя Создайте новую запись, например this->User->create();
  2. У вас нет else части,Напишите как следует в else & check,

    else {$ this-> Session-> setFlash (__ («Пользователь не может быть сохранен», true));}

0 голосов
/ 21 июня 2014

bla..bla:)
Я думаю, что сообщение об ошибке validate не отображается
, потому что вы используете $this->redirect('/users');
, когда перенаправление cakephp будет отображать сообщение об ошибке очистки сообщения:)

Вы можете прокомментировать строку //$this->redirect('/users');, а затем повторить попытку:)

0 голосов
/ 27 сентября 2013

Я думаю, что лучший способ проверки - объединить проверку на стороне сервера и на стороне клиента. Поля формы должны проверяться при фокусировке / размытии с помощью ajax-вызова к правилам проверки на стороне сервера через ваши контроллеры. Это обеспечит согласованность проверки на стороне сервера и на стороне клиента.

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

Я думаю, что ваш public $validate написан неправильно

Попробуйте это

class User extends AppModel {
        public $name = "Users";
        //For more strict validation you should have more than one parameter
        //submitted to the rule array for date which requires the user to enter 
        // exactly what you need. for example 01/01/12 instead of 01/01/2012 
        //Please check the following address
        //http://book.cakephp.org/2.0/en/models/data-validation.html#Validation::date
        //However, this should work fine.

        public $validate = array ( 
                'birth_dt' => array (
                    'rule' => array('date'),
                    'required' => true,
                    'allowEmpty' => false,
                    'message' => 'Please Give valid date'
                )
        );
}
0 голосов
/ 25 января 2012

Вы можете проверить, почему save () не удалось, изучив массив validationErrors в модели Пользователь .Из UsersController к нему можно получить доступ через $ this-> User-> validationErrors .

Более того, логика вашего контроллера не совсем верна.В некоторых комментариях упоминалось, что вы не проверяете, был ли save () успешным, и вы всегда утверждаете, что пользователь был добавлен, даже если это не так.

Попробуйте что-то вроде этого:

    if($this->request->is('post') && !empty($this->data)) {
        if($this->User->save($this->data)) {
            $this->Session->setFlash('User added!', 'flash_good');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Could not add player.', 'flash_bad');
        }           
    }

Таким образом, когда save () по какой-то причине не удается, пользователь останется в этом действии, а форма все еще будетбыть заполнены данными, введенными пользователем.Кроме того, если вы используете $ this-> Form-> input (...) для создания элементов формы, ошибки проверки будут автоматически добавлены в форму.

...