我正在尝试在我的 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('signup') 和 $this->form_validation->run('email'))。
问题是,当我使用 $config 数组时,当表单发布失败时,错误不会添加到表单验证类中(因此不会显示)。当我没有使用规则集,而只是使用 $this->form_validation->set_rules() 方法时,它确实添加并显示错误。
我做错了什么,使用一组规则输入无效的表单数据时没有添加错误消息?
$config 数组需要位于 application/config 目录中名为 form_validation.php 的文件中。然后在加载 CI 时自动加载它,并在创建表单验证对象时传递给它。
第一次调用 FV 对象的 run() 方法时,如果 FV 对象中没有设置规则,它将查找创建时给出的配置规则,并使用按作为参数传递的名称索引的组跑步()。以后在 CI 应用程序的同一调用中对 run() 的所有调用(即使具有不同的组名称)都将绕过此检查,因为现在已经设置了规则 - 即,您只能在调用中设置一次规则组。
因此,您将无法创建两组规则,然后一组接着一组地调用。您可以致电其中一个或另一个。
使用 set_rule() 级联规则可能会更好 - 即使用 set_rule() 添加一些规则,然后针对它们进行验证。如果通过,请添加更多规则并重试验证。您有效地重复旧规则,知道它们会通过,但这意味着任何失败都将是新规则的结果。
在 form_validation 数组中尝试 array_merge。
这里如果你想要两个数组组合并且gat连接验证错误。你可以用这个
$config["form"] = array_merge($config['signup'], $config['email']);
希望这有帮助。
如果有人面临同样的问题,请尝试以下操作:
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);
注意:先设置数据再设置规则,反之则不行!
嘿阿尔文,您需要在提交表单之前运行 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');
}
}