我正在尝试在我的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()方法 .
在使用一组规则时输入无效表单数据时没有添加任何错误消息我做错了什么?
4 回答
$ config数组需要位于application / config目录中名为form_validation.php的文件中 . 然后在加载CI时自动加载它,并在创建时传递给Form验证对象 .
第一次调用FV对象的run()方法时,如果在FV对象中没有设置规则,它会查找在创建时给出的配置规则,并使用由作为参数传递的名称索引的组 . 跑() . 所有以后在CI应用程序的相同调用中调用run(),即使使用不同的组名,也会绕过此检查,因为现在已经设置了规则 - 即,您只能在调用中设置规则组一次 .
因此,您将无法创建两组规则,然后逐个调用 . 你可以打电话给另一个或另一个 .
使用set_rule()级联规则可能更好 - 即使用set_rule()添加一些规则,然后对它们进行验证 . 如果它们通过,请添加一些规则并重试验证 . 你有效地重复旧规则,知道它们会通过,但这意味着任何失败都将是新规则的结果 .
在form_validation数组中尝试array_merge .
这里如果你想要两个数组来进行combint和gat join验证错误 . 你可以用它
希望这有帮助 .
如果有人遇到同样的问题,试试这个:
您需要在每次验证后重置以更改规则 . 您还可以使用:
注意:首先设置数据然后设置规则,它反过来不起作用!
嘿alwin你需要在提交表单之前运行form_validation规则....