2012-12-16 101 views
3

我想在我的Codeigniter项目中创建一组表单验证规则,这样当第一个集合的验证失败时,第二个验证集不应该运行。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); 

我知道,我现在可以运行每个单独设置($这个 - > form_validation->运行(“注册”的验证)和$这个 - > form_validation-> run('email')在这种情况下)。

问题是,当我使用$ config数组时,错误不会被添加到Form验证类(因此不会显示),而表单发布失败。当我没有使用规则集时,它确实添加并显示了错误,但只是$ this-> form_validation-> set_rules()方法。

我在使用一组规则时输入无效表单数据时没有添加错误消息的错误是什么?

回答

1

$ config数组需要位于application/config目录中名为form_validation.php的文件中。它在装入CI时自动加载,并在创建时传递给Form验证对象。

第一次调用FV对象的run()方法时,如果在FV对象中没有设置规则,它会查找它在创建时给出的配置规则,并使用由该名称索引的组作为参数传递给run()。所有稍后在CI应用程序的相同调用中调用run()(即使使用不同的组名称)都将绕过此检查,因为现在已经设置了规则 - 即,您只需在调用中设置规则组一次。

因此,您将无法创建两组规则,然后依次调用。您可以拨打一个或另一个。

使用set_rule()级联规则可能会更好 - 即使用set_rule()添加一些规则,然后针对它们进行验证。如果他们通过,添加更多规则并重新验证。你有效地重复旧规则,知道他们会通过,但这意味着任何失败将是新规则的结果。

-1

哎阿尔文u需要提交表单 ....的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'); 

      } 
     } 
0

尝试array_merge之前运行form_validation规则。

这里如果你想要两个数组来梳理和gat加入验证错误。你可以用这个

$config["form"] = array_merge($config['signup'], $config['email']); 

希望这个帮助。

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); 

注意:先设置数据,然后设置规则,但不会以其他方式工作!