使用规则集进行 Codeigniter 表单验证
Posted
技术标签:
【中文标题】使用规则集进行 Codeigniter 表单验证【英文标题】:Codeigniter form validation using set of rules 【发布时间】:2012-12-03 22:54:52 【问题描述】:我正在尝试在我的 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() 方法。
在使用一组规则时输入无效表单数据时没有添加错误消息是我做错了什么?
【问题讨论】:
【参考方案1】:$config 数组需要位于 application/config 目录中名为 form_validation.php 的文件中。然后在加载 CI 时自动加载,并在创建时传递给 Form 验证对象。
第一次调用 FV 对象的 run() 方法时,如果在 FV 对象中没有设置任何规则,它会查找它在创建时给出的配置规则,并使用由传递的名称索引的组作为 run() 的参数。在 CI 应用程序的同一次调用中,所有后来对 run() 的调用,即使使用不同的组名,也将绕过此检查,因为现在已经设置了规则 - 即,您只能在调用中设置一次规则组。
因此,您将无法创建两组规则,然后依次调用。您可以调用一个或另一个。
使用 set_rule() 级联规则可能会更好 - 即,使用 set_rule() 添加一些规则,然后针对它们进行验证。如果它们通过,请添加更多规则并重试验证。你有效地重复旧规则,知道它们会通过,但这意味着任何失败都将是新规则的结果。
【讨论】:
【参考方案2】:在 form_validation 数组中尝试 array_merge。
这里如果你想要两个数组组合和gat join 验证错误。你可以用这个
$config["form"] = array_merge($config['signup'], $config['email']);
希望对您有所帮助。
【讨论】:
【参考方案3】:如果有人遇到同样的问题,试试这个:
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);
注意:先设置数据再设置规则,反之不行!
【讨论】:
【参考方案4】:嘿,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');
【讨论】:
以上是关于使用规则集进行 Codeigniter 表单验证的主要内容,如果未能解决你的问题,请参考以下文章