将验证规则保存到配置文件时出现问题


Issue with saving validation rules to a configuration file

我正试图将验证规则从控制器移动到配置文件中。我正在遵循这里记录的指示,但我无法让它发挥作用。提交表单时,不会执行验证。回声validation_errors()不打印任何内容。

在进行了一些挖掘之后,表单验证库中的run()方法返回false,因为没有设置配置规则。以下是摘录:

system/librarys/Form_validation.php:

// No validation rules?  We're done...
if (count($this->_config_rules) == 0)
{
    return FALSE;
}

如有任何帮助,我们将不胜感激。这是我的代码:

application/controllers/signup.php:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Signup extends CI_Controller {
    public function __construct() {
        parent::__construct();
    }
    public function index() {
        if ($this->form_validation->run()) {
            $this->user_model->insert(array(
                'email_address' => $this->input->post('email_address'),
                'password' => $this->input->post('password'),
            ));
            redirect('/log-in');
        }
        $this->load->view('header');
        $this->load->view('signup/index');
        $this->load->view('footer');
    }
}
/* End of file signup.php */
/* Location: ./application/controllers/signup.php */

application/config/form_validation.php:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
    'signup/index' => array(
        array(
            'field' => 'email_address',
            'label' => 'Email Address',
            'rules' => 'trim|required|max_length[255]|valid_email|email_in_use'
        ),
        array(
            'field' => 'password',
            'label' => 'Password',
            'rules' => 'required|min_length[6]'
        ),
        array(
            'field' => 'confirm_password',
            'label' => 'Confirm Password',
            'rules' => 'required|matches[password]'
        ),
    ),
);
/* End of file form_validation.php */
/* Location: ./application/config/form_validation.php */

我使用的是CI 2.1.0。

您需要在run方法中传递配置变量。阅读你发布的链接中名为"调用特定规则组"的部分。

也许这是您的错别字,但配置应该存储在application/config/form_validation.php中(而不是您在文章中所写的"application/controllers/signup.php")。通过这种方式,它应该被自动调用。

扩展@Catfish所说的内容,你可以:

  1. 不要创建不同的规则集(如果你只需要一个),你的数组会看起来像:

    $config = array(
               array(
                     'field'   => 'username',
                     'label'   => 'Username',
                     'rules'   => 'required'
                  ),
               array(
    
  2. 创建不同的规则集,这些规则遵循您使用过的结构;但在这种情况下,您需要传递给run()方法,该方法是您想要使用的规则。所以,在你的情况下,它应该是

      if($this->form->validation->run('signup/index'))
    

一些事情。。。

您是否已在config/autoload.php中加载form_validation库?因为我没有看到它被加载到你的控制器中。如果要将其加载到控制器中,请使用$this->load->library('form_validation')

我看到一个名为email_in_use的电子邮件字段规则,这个规则存储在哪里?如果要创建自定义规则,请确保它位于libraries/MY_Form_validation.php中。

我从来没有用过控制器/函数的方法,它一直对我有效。我会用$this->form_validation->run('login');之类的东西来做这样的事情。

您能确认验证run()调用的评估结果是true还是false吗?您的页面是否重定向到登录?(顺便说一句:我认为你在重定向调用中不需要/

最后,您是否将PHP错误设置为E_ALL?检查php.ini