我不知道为什么这不起作用(我使用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配置 - 我上面写的所有内容 - 验证不起作用!!!
答案 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)
好的,我知道出了什么问题:
答案 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