【问题标题】:Issue with saving validation rules to a configuration file将验证规则保存到配置文件时出现问题
【发布时间】:2012-03-09 06:51:21
【问题描述】:

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

稍微挖掘了一下,表单验证库中的run()方法返回false,因为没有设置配置规则。摘录如下:

system/libraries/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 */

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。

【问题讨论】:

  • 我有同样的专业...这是一个错误吗?
  • 似乎有人和以前一样面对同一个职业。你可以在这个link找到一些解决方案

标签: php codeigniter validation codeigniter-2


【解决方案1】:

一些事情......

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

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

我从未使用过控制器/函数方法,它一直对我有用。我会使用$this-&gt;form_validation-&gt;run('login'); 之类的东西。

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

最后,您是否将 PHP 错误打开到 E_ALL?检查php.ini

【讨论】:

    【解决方案2】:

    也许这是你的错字,但配置应该存储在application/config/form_validation.php 中(而不是你在帖子中写的“application/controllers/signup.php”)。 这样它应该会被自动调用。

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

    1. 不要创建一组不同的规则(如果您只需要一个),您的数组将如下所示:

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

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

    【讨论】:

    • 我将需要多组规则,尽管如果只有一组规则仍然不起作用。此外,将规则传递给 run() 方法会导致相同的行为。
    【解决方案3】:

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

    【讨论】:

    • 文档指出“当规则组与控制器类/函数的名称相同时,它将在从该类/函数调用 run() 函数时自动使用。”我不应该将配置密钥传递给run() 方法,尽管这样做时它仍然不起作用。
    猜你喜欢
    • 2019-04-26
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多