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问题了。我同意这个解决方案并不理想,但我还没有找到更好的蛋糕替代品。