我在每个页面都有一个登录表单(在右侧菜单中)。问题是当用户在注册页面上时,验证登录表单中的字段。我在两种表单中都有username
和password
个字段,并且都经过验证。
无论如何,我只是想知道解决这个问题的最佳方法是什么。
答案 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
}