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

Validation 禁用特定表单的验证(用户登录) 问题,validation,cakephp,Validation,Cakephp,我在每个页面上都有一个登录表单(在右菜单中)。问题在于,当用户在注册页面上时,登录表单中的字段将被验证。我在两种表单中都有用户名和密码字段,并且都经过验证 思想: 注册表单的不同字段名称(注册\用户名、注册\密码、注册\电子邮件),然后在保存前设置正常名称 登录表单的不同模型(但albo使用用户表) 无论如何,我只是想知道解决这个问题的最佳方法是什么。我猜这两个表单都会提交到不同的操作,注册表单提交到Users->register(),登录表单提交到Users->login() 我建议您在执

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

思想:
  • 注册表单的不同字段名称(注册\用户名、注册\密码、注册\电子邮件),然后在保存前设置正常名称
  • 登录表单的不同模型(但albo使用用户表)

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

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


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

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


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

您的第二个选项是正确的。我以前遇到过这个问题,并在面包店写了一篇关于这个问题的文章:

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

class RegisterForm extends User {
}
然后,在控制器中加载这些表单,但您可以:

$this->loadModel('RegisterForm');
然后像往常一样调用验证:

$this->RegisterForm->save($this->data);
对于您的特定情况,您可能不希望创建LoginForm模型,而只使用RegisterForm模型。这将使您能够利用AuthComponent的任何魔力


HTH.

您的第二个选项是正确的。我以前遇到过这个问题,并在面包店写了一篇关于这个问题的文章:

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

class RegisterForm extends User {
}
然后,在控制器中加载这些表单,但您可以:

$this->loadModel('RegisterForm');
然后像往常一样调用验证:

$this->RegisterForm->save($this->data);
对于您的特定情况,您可能不希望创建LoginForm模型,而只使用RegisterForm模型。这将使您能够利用AuthComponent的任何魔力


HTH.

我还没有尝试使用相同输入的两种形式,但这适用于使用不同输入的两种形式。我不明白为什么它不能满足你的需要

视图: 确保每个提交按钮都有一个名称值,以便$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->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);
?>

可能需要仅使用模型中指定的验证子集来验证模型。例如,假设您有一个用户模型,其中包含名、姓、电子邮件和密码字段。在本例中,当创建或编辑用户时,您希望验证所有4个字段规则。然而,当用户登录时,您只需验证电子邮件和密码规则。为此,您可以传递一个选项数组,指定要验证的字段:

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

可能需要仅使用模型中指定的验证子集来验证模型。例如,假设您有一个用户模型,其中包含名、姓、电子邮件和密码字段。在本例中,当创建或编辑用户时,您希望验证所有4个字段规则。然而,当用户登录时,您只需验证电子邮件和密码规则。为此,您可以传递一个选项数组,指定要验证的字段:

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

提交表单时,如何区分这两个数据元素?两个
username
字段在试图保存到$this->data['User']['username']时是否冲突?提交表单时如何区分这两个数据元素?当这两个
username
字段试图保存到$this->data['User']['username']中时,这两个字段是否冲突?我喜欢你的解决方案,尽管我认为当出现更多类似情况时(用户面板-更改电子邮件地址或密码,密码恢复表单)。如果你考虑一下,一旦用户登录,您的登录表单就会消失。在此之后,您就不再有2-forms-same-model问题了。我同意这个解决方案并不理想,但我还没有找到更好的Cake替代方案。我喜欢你的解决方案,尽管我认为当出现更多这样的情况时(用户面板-更改电子邮件地址或密码,密码恢复表)。如果你想一想,一旦用户登录,你的登录表就会消失。在此之后,您就不再有2-forms-same-model问题了。我同意这个解决方案并不理想,但我还没有找到更好的蛋糕替代品。