禁用特定表单的验证(用户登录)

时间:2010-12-29 20:29:51

标签: validation cakephp

问题

我在每个页面都有一个登录表单(在右侧菜单中)。问题是当用户在注册页面上时,验证登录表单中的字段。我在两种表单中都有usernamepassword个字段,并且都经过验证。

思路:

  • 注册表单的不同字段名称(register_username,register_password,register_email),然后在保存之前设置正常名称。
  • 登录表单的不同型号(但使用用户表的albo)?

无论如何,我只是想知道解决这个问题的最佳方法是什么。

4 个答案:

答案 0 :(得分:1)

我猜这两种表单都会提交不同的操作,注册表单提交到Users->register(),登录表单提交到Users->login()

我建议您在进行register()操作时,可以尝试将相关变量复制到另一个关联数组中,然后验证并保存该变量,而不是验证并保存$this->data变量

答案 1 :(得分:0)

你的第二个选择是正确的。我之前遇到过这个问题,并在面包店写了一篇关于它的文章:Multiple Forms per page for the same model

基本思想是为扩展原始模型的每个表单创建单独的模型:

class RegisterForm extends User {
}

然后,在您的控制器中加载这些表格,但请您:

$this->loadModel('RegisterForm');

然后像往常一样调用验证:

$this->RegisterForm->save($this->data);

对于您的特定情况,您可能不想创建LoginForm模型,并且只有RegisterForm模型。这将让您利用AuthComponent的任何魔力。

HTH。

答案 2 :(得分:0)

我没有尝试过两种具有相同输入的表单,但这适用于具有不同输入的两种表单。我不明白为什么它不适合你的需要。

查看: 确保每个提交按钮都有一个名称值,以便$ this-> params可以识别它。

//first form ...
<?php
    $profile_options = array('label' => 'edit profile',
                              'name' => 'form1');
    echo $this->Form->end($profile_options);
?>
//second form ...
<?php
    $password_options = array('label' => 'edit password',
                              'name' => 'form2');
    echo $this->Form->end($password_options);
?>

控制器动作: 使用$ this-&gt; params来测试每个表单提交

if(isset($this->params['form']['form1'])){
    $this->User->set($this->data); //necessary to specify validation rules
       if($this->User->validates(array('fieldList' => array('email')))){
             $this->User->saveField('email', $this->data['User']['email']);
       }
}
elseif(isset($this->params['form']['form2'])){
    //same deal for second form
}

答案 3 :(得分:0)

可能需要仅使用模型中指定的验证子集来验证模型。例如,假设您有一个User模型,其中包含first_name,last_name,email和password字段。在这种情况下,在创建或编辑用户时,您需要验证所有4个字段规则。然而,当用户登录时,您将仅验证电子邮件和密码规则。为此,您可以传递一个options数组,指定要验证的字段:

if ($this->User->validates(array('fieldList' => array('email', 'password')))) {
    // valid
} else {
    // invalid
}
相关问题