0

我不知道为什么这不起作用(我使用的是 CakePHP 2.1 并且还尝试了 2.0):

这是模型

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');
?>

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

不可能!它必须工作!- 但它不...

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

也许我的数据库表有问题???

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;

这很奇怪——在我的应用程序文件夹中,我只添加了“UserModel.php”、“UserController.php”和“add.ctp”,以及一个数据库配置——我在上面写的所有内容——验证不起作用!!!

4

4 回答 4

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

于 2012-04-22T09:48:33.647 回答
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'));            
            }        
         }
    }
于 2013-11-26T21:18:12.507 回答
1

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

  1. 我的模型文件名为“UserModel.php”,应该是“User.php”
  2. 在文件 'User.php' 的开头,我必须输入 'App::uses('AppModel', 'Model');'
于 2012-04-22T11:59:50.210 回答
0

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

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

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

你可以在这里看到你需要的一切:食谱

于 2012-04-22T07:26:45.600 回答