在cakephp中验证函数
有谁能帮我提供一个清晰完整的示例,说明如何为两个字段设置验证,比如电子邮件和密码,以及错误消息 据我所知,正确的格式是:在cakephp中验证函数,cakephp,validation,Cakephp,Validation,有谁能帮我提供一个清晰完整的示例,说明如何为两个字段设置验证,比如电子邮件和密码,以及错误消息 据我所知,正确的格式是: var $validate = array( 'password' => array( 'rule' => array('minLength', '8'), 'message' => 'Minimum 8 characters long' ), 'email_id' => array('ema
var $validate = array(
'password' => array(
'rule' => array('minLength', '8'),
'message' => 'Minimum 8 characters long'
),
'email_id' => array('email')
);
但在我的测试中,我似乎无法让它工作(显示验证消息,或停止操作的执行)
验证工作正常,但无法显示自定义消息
编辑
验证和页面重定向现在工作正常。只有特定消息不会显示。也就是说,如果我输入的密码少于8个字符,则应立即或在我单击“注册”按钮后显示消息“至少需要8个字符”。有什么方法可以做到这一点吗
编辑2
我的视图文件
<!-- File: /app/views/forms/index.ctp -->
<?php
echo $javascript->link('prototype.js');
echo $javascript->link('scriptaculous.js');
echo $html->css('main.css');
?>
<div id="register">
<h3>Register</h3>
<?php
echo $form->create('User',array('action'=>'register'));
echo $form->input('User.name');
echo $form->input('User.email_id');
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>
登记
登录
控制器:
<?php
class UsersController extends AppController
{
var $name = 'Users';
var $uses=array('Form','User','Attribute','Result');
var $helpers=array('Html','Ajax','Javascript','Form');
function register()
{
$userId=$this->User->registerUser($this->data);
$this->User->data=$this->data;
if (!$this->User->validates())
{
$this->Flash('Please enter valid inputs','/forms' );
return;
}
$this->Flash('User account created','/forms/homepage/'.$userId);
}
function login()
{
$userId=$this->User->loginUser($this->data);
$this->User->data=$this->data;
if (!$this->User->validates())
{
$this->Flash('Please enter valid inputs','/forms' );
return;
}
if($userId>0){
$this->Flash('Login Successful');
$this->redirect('/forms/homepage/'.$userId);
break;
}
else{
$this->flash('Username and password do not match.','/forms');
}
}
}
?>
型号:
<?php
class User extends AppModel {
var $name = 'User';
var $components=array('Auth');
var $validate = array(
'name' => array(
'rule' => VALID_NOT_EMPTY,
'message' =>'Name cannot be null.'
),
'password' => array(
'rule' => array('minLength', '6'),
'message' => 'Minimum 6 characters long.'
),
'email_id' => array(
'rule'=> array('email'),
'message'=>'Invalid email.'
)
);
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;
}
}
}
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;
}
}
?>
以下是我的项目中的一个实例 以下是在模型中设置验证的方式: 忽略我正在从构造函数初始化validate数组这一事实,如果您不打算实现I18n和L10n,您可以像现在一样继续这样做 在控制器中处理验证错误: 从第266行到第280行,您可以看到正在使用setFlash()+return处理验证和保存错误 这几乎是你需要做的全部,只是别忘了你需要这样做,消息才能按预期工作 常见错误:验证失败后,您必须不执行$this->redirect()
希望这能让你走上正轨:)这是我项目的一个实例 以下是在模型中设置验证的方式: 忽略我正在从构造函数初始化validate数组这一事实,如果您不打算实现I18n和L10n,您可以像现在一样继续这样做 在控制器中处理验证错误: 从第266行到第280行,您可以看到正在使用setFlash()+return处理验证和保存错误 这几乎是你需要做的全部,只是别忘了你需要这样做,消息才能按预期工作 常见错误:验证失败后,您必须不执行$this->redirect()
希望这将使您走上正确的轨道:)为什么不试试$this->modelName->invalidFields(),它将返回一个数组,其中包含验证失败的字段和要显示的消息
为什么不试试$this->modelName->invalidFields(),它将返回一个数组,其中包含验证失败的字段和要显示的消息
现在,如果我输入错误,它将被重定向到页面/users/register,并按如下方式显示内容:请更正下面的错误未找到错误:此服务器上未找到请求的地址“/users/register”。我没有收到像“无效电子邮件”或“名称字段不应为空”这样的特定错误。如果输入了无效的输入,我如何将其重定向到登录页面?听起来好像您有一个配置错误的Auth组件,它阻止了那些特定的错误消息出现。你真的应该试着注释掉部分代码,并检查哪一位给你带来了麻烦。我需要用Auth组件来显示这些错误吗?我只是检查了我的components文件夹(在app文件夹中),没有auth.php文件。不,auth是一个内置组件。如果没有显示特定消息,这可能意味着您正在某处执行重定向()。你能发布你的代码让我们检查一下吗?我已经发布了我的全部代码。我做重定向的唯一地方是检查userId的值。如果($userId>0){$this->Flash('Login Successful');$this->redirect('/forms/homepage/'.$userId);break;}如果我尝试在Flash消息本身中重定向,比如$this->Flash('Login Successful','/forms/homepage/'.$userId),它不会重定向到该页面。如果我不使用重定向,登录成功后如何转到主页?现在,如果我输入错误,它将重定向到页面/用户/注册,并按如下方式显示内容:请更正下面的错误未找到错误:此服务器上未找到请求的地址“/users/register”。我没有收到像“无效电子邮件”或“名称字段不应为空”这样的特定错误。如果输入了无效的输入,我如何将其重定向到登录页面?听起来好像您有一个配置错误的Auth组件,它阻止了那些特定的错误消息出现。你真的应该试着注释掉部分代码,并检查哪一位给你带来了麻烦。我需要用Auth组件来显示这些错误吗?我只是检查了我的components文件夹(在app文件夹中),没有auth.php文件。不,auth是一个内置组件。如果没有显示特定消息,这可能意味着您正在某处执行重定向()。你能发布你的代码让我们检查一下吗?我已经发布了我的全部代码。我做重定向的唯一地方是检查userId的值。如果($userId>0){$this->Flash('Login Successful');$this->redirect('/forms/homepage/'.$userId);break;}如果我尝试在Flash消息本身中重定向,比如$this->Flash('Login Successful','/forms/homepage/'.$userId),它不会重定向到该页面。如果我不使用重定向,在登录成功后如何转到主页?