проверка данных всегда возвращает true в cakephp

проверка данных в моей пользовательской модели всегда возвращает true. Кто-нибудь может сказать мне, почему? Модель: user.php

class User extends AppModel {

var $name = "User";

public $validate = array(

    "username" => array(
        "rule" => "notBlank",
        "message" => "Please enter title !",
    ),
    "password" => array(
        "rule" => "notBlank", // tập luật là không rỗng
        "message" => "Please enter info !", // thông báo khi có lỗi
    ));


}

Контроллер пользователей:

if(($this->request->is('post'))) {

        $this->loadModel('User');
        $this->User->set($this->data);
        echo "</br> vao ".$this->User->validates();
        if($this->User->validates()){
            echo "</br>".$this->User->validates();
            $this->Session->setFlash("Data is avaliable !");

        }else{
            $error = $this->User->validationErrors;
            $this->Session->setFlash("Data is mot avaliable !");
            echo"not validate";
        }

Но возвращение всегда верно.

Я пробовал запускать cakephp 2..7.2 и 2.6.0, но результат тот же.


person luannx    schedule 25.08.2015    source источник
comment
Не могли бы вы поделиться кодом просмотра пользователя.   -  person Sudhir    schedule 25.08.2015
comment
user.php со строчной u? Действительно?   -  person ndm    schedule 25.08.2015
comment
да, представление пользователя: ‹метод формы=post action=login› ‹fieldset› ‹legend›Логин‹/legend› ‹label›Имя пользователя‹/метка›‹input type=text name=username size=20 /›‹br / › ‹метка›Пароль‹/метка›‹тип ввода=имя пароля=размер пароля=20 /›‹br /› ‹метка›‹/метка›‹тип ввода=отправить имя=ок значение=Логин /› ‹br› ‹ /набор полей› ‹/форма›   -  person luannx    schedule 26.08.2015
comment
Ваш шаблон представления выглядит неправильно. Разве вы не используете FormHelper для создания полей формы? Ваши два поля должны иметь имена, похожие на data[User][username] и data[User][password].   -  person drmonkeyninja    schedule 26.08.2015


Ответы (1)


В CakePHP 2.x доступ к данным запроса/формы осуществляется через $this->request->data, а не $this->data. Поэтому вам нужно изменить строку, в которой вы устанавливаете данные модели, используя $this->User->set(), чтобы использовать $this->request->data: -

if ($this->request->is('post')) {
        $this->User->set($this->request->data);
        if ($this->User->validates()){
            $this->Session->setFlash("Data is avaliable !");
        } else{
            $this->Session->setFlash("Data is not avaliable !");
        }
}

Пока вы придерживаетесь соглашений CakePHP, нет необходимости загружать модель User в UsersController, так как она должна загружаться автоматически. Таким образом, вы можете удалить $this->loadModel('User').

Если вы используете правило проверки notBlank, убедитесь, что вы используете CakePHP 2.7, так как этого правила нет в более ранних версиях Cake. Для CakePHP 2.6 используйте правило notEmpty.

person drmonkeyninja    schedule 25.08.2015
comment
Спасибо, я пытался исправить эти изменения, но результат все тот же, всегда возвращает true vadidate - person luannx; 26.08.2015
comment
Вы проверили, какие значения отправляются? Попробуйте вывести значение $this->request->data, чтобы убедиться, что поля присутствуют в опубликованных данных. - person drmonkeyninja; 26.08.2015
comment
пожалуйста, попробуйте notEmpty вместо notBlank - person chirag; 11.09.2015