在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),它不会重定向到该页面。如果我不使用重定向,在登录成功后如何转到主页?