Php 自定义配置文件无法与表单验证一起使用

Php 自定义配置文件无法与表单验证一起使用,php,codeigniter,validation,Php,Codeigniter,Validation,我在application/config/validation\u rules.php中设置了验证规则,如下所示 (简体版) 我这样称呼它: $this->config->load('validation_rules'); $this->form_validation->set_rules($config); if($this->form_validation->run('member/register') == FALSE) { $page = ar

我在application/config/validation\u rules.php中设置了验证规则,如下所示 (简体版)

我这样称呼它:

$this->config->load('validation_rules');
$this->form_validation->set_rules($config);
if($this->form_validation->run('member/register') == FALSE)
{
    $page = array(
            'meta_title' => 'member registration',
            'load_page' => 'front/register_view'
    );

    $this->load->view('front/template', $page);
}
validation_errors()函数不仅没有显示任何内容,而且还出现以下错误:

Message: Undefined variable: config
更新:(这是我的控制器)

应该是:

$this->config->load('validation_rules', TRUE);
$this->form_validation->set_rules($this->config->item('validation_rules', 'validation_rules'));
根据:

您的规则错误,您忘记将验证组放入数组:

$config['validation_rules'] = array(
        'member/register' => array(
            array(
                'field' => 'language',
                'label' => 'language',
                'rules' => 'required|min_length[5]|max_length[12]'
            ),
            array(
                'field' => 'email',
                'label' => 'email',
                'rules' => 'required|valid_email'
            ),
            array(
                'field' => 'password',
                'label' => 'password',
                'rules' => 'required|min_length[8]'
            ),
            array(
                'field' => 'verify_password',
                'label' => 'password',
                'rules' => 'required|min_length[8]|matches[password]'
            )
        )
);

我遇到了相同的问题,但我通过使用以下配置成功解决了该问题:

在我的应用程序/config/form_validation.php中:

$config = array(
    "register" => array(
        array(
            "field" => "username",
            "label" => "Username",
            "rules" => "required"
        )
    )
);
在application/config/autoload.php内自动加载自定义配置文件“form_validation.php”:

$autoload['config'] = array('form_validation');
在我的控制器中:

// manually set rules by taking $config["register"] from form_validation.php
$this->form_validation->set_rules($this->config->item("register"));

// call run() without parameter
if ($this->form_validation->run() == FALSE) {
    $this->load->view("user/register_test");
} else {
    echo "Form content is correct";
}

我尝试使用
$this->form\u validation->run(“register”)
调用验证器,但没有使用
$this->form\u validation->set\u rules()
函数,但我没有成功。通过从form_validation.php中的配置数组中检索规则,手动设置规则。如果要扩展form_validation库,需要将
$config
数组传递给父构造函数:

class MY_Form_validation extends  CI_Form_validation {

/**
 * constuctoooor
 */
function MY_Form_validation($config){
    parent::__construct($config);

}

使用文档中概述的方法也更简洁:避免调用
$this->form\u validation->set\u rules(…)


请参阅下面的内容,您没有正确地从配置文件访问变量,因此$config从未存在,并导致上述错误。由于$config包含规则,因此这些规则从未运行过。感谢您的评论,但是validation_errors()函数仍然返回空。我已经用控制器源代码更新了上面的这篇文章。@SarmenB.,您的验证组不在数组中。每个组都需要在上面这样的数组中分组。谢谢,我不知道,由于某种原因,它仍然没有显示。我开始放弃了,谢谢你的帮助:)@SarmenB.,不要放弃=o)试试我上面帖子底部的代码,这样我们可以收集一些调试信息。@SarmenB。完成此操作后,请告诉我您获得的输出,您应该具有
YYY
、输出的数组和
AAA
$config = array(
    "register" => array(
        array(
            "field" => "username",
            "label" => "Username",
            "rules" => "required"
        )
    )
);
$autoload['config'] = array('form_validation');
// manually set rules by taking $config["register"] from form_validation.php
$this->form_validation->set_rules($this->config->item("register"));

// call run() without parameter
if ($this->form_validation->run() == FALSE) {
    $this->load->view("user/register_test");
} else {
    echo "Form content is correct";
}
class MY_Form_validation extends  CI_Form_validation {

/**
 * constuctoooor
 */
function MY_Form_validation($config){
    parent::__construct($config);

}
/**
 * This is the POST target for the password reset form above
 * @return null
 */
    public function submit(){

        // perform validation //
        if($this->form_validation->run() == FALSE){
            // display error on sign-up page //
            $this->session->set_flashdata("system_validation_errors", validation_errors());
            redirect('member/forgot/password');
        }

        // more awesome code
    }