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注册教程。。有人能告诉我一个很好的教程吗?