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

时间:2012-02-17 21:21:13

标签: php codeigniter validation codeigniter-2

我正在尝试将验证规则从控制器移动到配置文件中。我按照文件here的说明进行操作,但我无法使用它。提交表单时,验证不会执行。回应validation_errors()不打印任何内容。

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

系统/库/ Form_validation.php:

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

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

应用/控制器/ 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 */

应用/配置/ 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。

3 个答案:

答案 0 :(得分:0)

您需要在run方法中传递config var。阅读发布链接中名为“呼叫特定规则组”的部分。

答案 1 :(得分:0)

也许这是你身边的错字,但配置应该存储在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'))
    

答案 2 :(得分:0)

一些事情......

您是否在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