Validation 为什么验证错误没有显示在CakePHP中?

Validation 为什么验证错误没有显示在CakePHP中?,validation,cakephp,Validation,Cakephp,我正在尝试在登录页面中对名称、电子邮件和密码字段执行验证。如果输入未通过验证,则应显示错误消息 但在这里,当我填写详细信息并提交时,它被重定向到下一页。只有值未保存在数据库中 为什么不显示该消息 这是我的模型: class User extends AppModel { var $name = 'User'; var $validate = array( 'name' => array( 'alphaNumeric'

我正在尝试在登录页面中对名称、电子邮件和密码字段执行验证。如果输入未通过验证,则应显示错误消息

但在这里,当我填写详细信息并提交时,它被重定向到下一页。只有值未保存在数据库中

为什么不显示该消息

这是我的模型:

class User extends AppModel {
    var $name = 'User';
        var $validate = array(
            'name' => array(
            'alphaNumeric' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Alphabets and numbers only'
            ),
            'between' => array(
                'rule' => array('between', 5, 15),
                'message' => 'Between 5 to 15 characters'
            )
        ),
            'password' => array(
            'rule' => array('minLength', '8'),
            'message' => 'Mimimum 8 characters long'
        ),
        'email_id' => 'email'
    );

    function loginUser($data) {
        $this->data['User']['email_id'] = $data['User']['email_id'];    
        $this->data['User']['password'] = $data['User']['password'];            

        $login = $this->find('all');
        foreach ($login as $form):
            if ($this->data['User']['email_id'] == $form['User']['email_id'] && $this->data['User']['password'] == $form['User']['password']) {
                $this->data['User']['id'] = $this->find('all',
                    array(
                        'fields' => array('User.id'),
                        'conditions' => array(
                            'User.email_id' => $this->data['User']['email_id'],
                            'User.password'=>$this->data['User']['password']
                        )       
                    )
                );
                $userId=$this->data['User']['id'][0]['User']['id'];
                return $userId;
            }
    endforeach;
    }

    function registerUser($data) {
        if (!empty($data)) {
            $this->data['User']['name'] = $data['User']['name'];
            $this->data['User']['email_id'] = $data['User']['email_id'];    
            $this->data['User']['password'] = $data['User']['password'];
            if($this->save($this->data)) {
                $this->data['User']['id']= $this->find('all', array(
                    'fields' => array('User.id'),
                    'order' => 'User.id DESC'       
                ));
                $userId=$this->data['User']['id'][0]['User']['id'];
                return $userId;
            }
        }
    }
}
这是我的控制器:

class UsersController extends AppController {
    var $name = 'Users';
    var $uses=array('Form','User','Attribute','Result');
    var $helpers=array('Html','Ajax','Javascript','Form');

    function login() {  
        $userId = $this->User->loginUser($this->data);
        if($userId>0) {
            $this->Session->setFlash('Login Successful.');
            $this->redirect('/forms/homepage/'.$userId);
            break;
        } else {
            $this->flash('Login Unsuccessful.','/forms');
        }
}

    function register() {   
        $userId=$this->User->registerUser($this->data);  
        $this->Session->setFlash('You have been registered.');
        $this->redirect('/forms/homepage/'.$userId);                        
    }      
}
编辑

例如,当在密码字段中输入少于8个字符时,为什么不显示最小长度为8个字符的消息

 <!--My view file File: /app/views/forms/index.ctp   -->
 <?php 
echo $javascript->link('prototype.js');
echo $javascript->link('scriptaculous.js');
echo $html->css('main.css');
?>

  <div id="appTitle"> 
  <h2> formBuildr </h2>
  </div>

  <div id="register">
  <h3>Register</h3>
  <?php
echo $form->create('User',array('action'=>'register'));
echo $form->input('User.name');
echo $form->error('User.name','Name not found');
echo $form->input('User.email_id');
echo $form->error('User.email_id','Email does not match');
echo $form->input('User.password');
echo $form->end('Register');
  ?>
  </div>

  <div id="login">
  <h3>Login</h3>
  <?php
echo $form->create('User',array('action'=>'login'));
echo $form->input('User.email_id');
echo $form->input('User.password');
echo $form->end('Login');
  ?>
  </div>

您的验证似乎是正确的

试试下面的方法怎么样:

确保将$form->create设置为适当的函数 确保没有$this->Model->在发布Model->save之前读取; 编辑

你有以下资料吗

function register()
{
   //do not put any $this->User->read or find() here or before saving pls.
   if ($this->User->save($this->data))
   {
       //...
   }
}
编辑2

如果在保存模型之前进行读取或查找,则会重置字段。您应该在表单中以type=hidden的形式传递变量。我希望我说的有道理

编辑3


我认为您需要将registerUser移动到控制器中,因为在模型中使用该函数不会为您提供错误的返回。即使有验证错误,它也总是正确的。

注释掉重定向行,并在config/core.php中将调试设置为2。然后查看正在生成的sql以查看插入是否有效。如果没有显示错误,可能是在视图中使用$form->text或$form->select而不是$form->input函数。只有$form->input函数会自动显示错误消息。

您在控制器中做什么?请同时发布该代码。在模型中的registerUser函数中,为什么要执行“全部”查找?您可能应该使用find“first”。否则,您将获得用户表中的所有用户Id。您也可以发布您的视图吗?不,实际上我将条目保存在表中,然后只获取已保存条目的Id。在保存之前我不会阅读或查找。是的,我注意到了。尝试移出控制器中的保存例程?我正在尝试将其保存到控制器中,但没有保存。。。函数寄存器{if!清空$this->data{if$this->User->save$this->data{$this->data['User']['id']=$this->User->find'all',array'fields'=>array'User.id','order'=>User.id DESC';$userId=$this->data['User']['id'][0]['User']['id'];$this->Session->setFlash“您已注册”。;$this->redirect“/forms/homepage/”。$userId;}}}}如果所有其他操作都失败,有时最好重新开始,也许看看其他人在做什么。注册是很常见的,我相信你可以在网上找到cakephp注册教程。。有人能告诉我一个很好的教程吗?