CakePHP中的数据验证不起作用

时间:2012-04-21 21:59:17

标签: cakephp cakephp-2.1 cakephp-appmodel

我不知道为什么这不起作用(我使用CakePHP 2.1并尝试过2.0):

这是Model

class User extends AppModel
    {
        public $validate = array('username' => array('rule' => 'email'));
    }

这是控制器

class UsersController extends AppController
    {
        function index()
        {
            $this->set('users', $this->User->find('all') );
        }

        function add()
        {
             if (!empty($this->request->data)) 
             {            
                if ($this->User->save($this->request->data)) 
                {                
                    $this->Session->setFlash('User has been registered.');
                    $this->redirect(array('action' => 'index'));            
                }        
             }
        }
    }

这是添加视图

<h1>Add Post</h1>
<?php
    echo $this->Form->create('User');
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->end('Register');
?>

它验证我写的任何内容......它应该检查用户名是否是电子邮件......

这是不可能的!它必须工作! - 但它没有......

我也用蛋糕php 2.0检查了它,它仍然无法正常工作 - 请帮助,它是如此简单,我必须工作...

我的db表可能出错了吗?

CREATE TABLE `users` (
   `id` int(10) unsigned not null auto_increment,
   `username` varchar(50),
   `password` varchar(50),
   `created` datetime,
   `modified` datetime,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9;

这很奇怪 - 在我的app文件夹中我只添加'UserModel.php','UserController.php'和'add.ctp',以及db配置 - 我上面写的所有内容 - 验证不起作用!!!

4 个答案:

答案 0 :(得分:2)

我认为$validate数组未正确声明。

试试这个:

$validate = array('username' => array(
                        'email' => array(
                            'rule' => array('email')
                        )));

或者这个:

$validate = array('username' => 'email');

请参阅http://book.cakephp.org/2.0/en/models/data-validation.html

答案 1 :(得分:1)

好的,我知道出了什么问题:

  1. 我的模型文件名被称为&#39; UserModel.php&#39;它应该是&#39; User.php&#39;
  2. 文件开头&#39; User.php&#39;我必须使用App :: uses(&#39; AppModel&#39;,&#39; Model&#39;);&#39;

答案 2 :(得分:1)

您应该在控制器中写入(UserController)

($this-User->set($this->request->data)
在函数验证之前

就像你看到的那样;

 function add()
    {
         if (!empty($this->request->data)) 
         {     $this->User->set($this->request->data);
            if ($this->User->validates()) 
            {   $this->User->save($this->request->data)
                $this->Session->setFlash('User has been registered.');
                $this->redirect(array('action' => 'index'));            
            }        
         }
    }

答案 3 :(得分:0)

O.k ......这就是我所做的(也将用户名更改为电子邮件)

$components = array('Auth' => array('authenticate' => array('Form' => array('fields' => array('username' => 'email', 'password' => 'password')))), 'Email');

这很有效。在CakePHP 1.3中,您必须同时指定用户名(电子邮件)和密码。因此,当我转移到CakePHP 2.1时,我继续做同样的事情并且没有验证问题。

您可以在此处查看所需内容:Cookbook