我试图在我的Codeigniter项目中创建一组表单验证规则,这样当第一个集合的验证失败时,第二个验证集不应该运行。
我在CI手册中找到了这个:
$config = array(
'signup' => array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'PasswordConfirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
),
'email' => array(
array(
'field' => 'emailaddress',
'label' => 'EmailAddress',
'rules' => 'required|valid_email'
),
array(
'field' => 'name',
'label' => 'Name',
'rules' => 'required|alpha'
),
array(
'field' => 'title',
'label' => 'Title',
'rules' => 'required'
),
array(
'field' => 'message',
'label' => 'MessageBody',
'rules' => 'required'
)
)
);
$this->form_validation->set_rules($config);
我知道我现在可以单独运行每个集的验证($ this-> form_validation-> run('注册')和$ this-> form_validation-> run(& #39;电子邮件')在这种情况下)。
问题是,当我使用$ config数组时,在表单发布失败时,错误不会被添加到表单验证类(因此不会显示)。当我没有使用规则集时,它确实添加并显示错误,但只是$ this-> form_validation-> set_rules()方法。
在使用一组规则时输入无效表单数据时没有添加错误消息我做错了什么?
答案 0 :(得分:1)
$ config数组需要位于application / config目录中名为form_validation.php的文件中。然后在加载CI时自动加载它,并在创建它时传递给Form验证对象。
第一次调用FV对象的run()方法时,如果没有在FV对象中设置规则,它会查找创建时给出的配置规则,并使用通过名称索引的组作为run()的参数。所有以后在CI应用程序的相同调用中调用run(),即使使用不同的组名,也会绕过此检查,因为现在已经设置了规则 - 即,您只能在调用中设置规则组一次。
因此,您将无法创建两组规则,然后逐个调用。你可以调用一个或另一个。
使用set_rule()级联规则可能会更好 - 即使用set_rule()添加一些规则,然后对它们进行验证。如果它们通过,则添加一些规则并重试验证。你有效地重复旧规则,知道它们会通过,但这意味着任何失败都将是新规则的结果。
答案 1 :(得分:0)
在form_validation数组中尝试array_merge。
这里如果你想要两个数组来进行combint和gat join验证错误。你可以用这个
$config["form"] = array_merge($config['signup'], $config['email']);
希望这有帮助。
答案 2 :(得分:0)
如果有人遇到同样的问题,请尝试以下方法:
if ($this->form_validation->run('signup') === FALSE) { /* return your errors */ }
$this->form_validation->reset_validation();
$this->form_validation->set_data($data);
if ($this->form_validation->run('email') === FALSE) { /* return your errors */ }
// Do your stuff
每次验证后都需要重置以更改规则。您也可以使用:
$this->form_validation->set_rules($validation_rules);
注意:首先设置数据然后设置规则,反之则不行!
答案 3 :(得分:-1)
嘿alwin你需要在提交表单之前运行form_validation规则 ....
$config = array(
'signup' => array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'PasswordConfirmation',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'Email',
'rules' => 'required'
)
),
'email' => array(
array(
'field' => 'emailaddress',
'label' => 'EmailAddress',
'rules' => 'required|valid_email'
),
array(
'field' => 'name',
'label' => 'Name',
'rules' => 'required|alpha'
),
array(
'field' => 'title',
'label' => 'Title',
'rules' => 'required'
),
array(
'field' => 'message',
'label' => 'MessageBody',
'rules' => 'required'
)
)
);
$this->form_validation->set_rules($config);
///u have to chek form validation getting validate or not
//enter code here
if ($this->form_validation->run() === FALSE) {
$this->load->view('your_view');
} else {$this->ur_controller->method_name();
$this->load->view('whatever ur view');
}
}