CodeIgniter创建多个自定义Form_validation扩展类

时间:2016-09-03 11:24:50

标签: php forms codeigniter

我知道我可以基于默认的

创建一个名为MY_Form_validation的文件
$config['subclass_prefix'] = 'MY_';

但是,如果我想用不同的MY_Form_validation类表示不同的表单怎么办?如果可以,我将如何加载并在验证控制器中调用它?

例如MY_Student_registration_form_validationMY_Student_cancellation_form_validation等等?

大多数在线问题只是直截了当地建议创建这个唯一的类但不适用于多个实例。

注意我尝试在MY_Student_registration_form_validation(CI 3.x)中创建application/libraries类并使用

将其加载到我的控制器中
$this->load->library('my_student_registration_form_validation');

我收到错误Non-existent class: My_student_registration_form_validation

然后我尝试了没有前缀MY

$this->load->library('student_registration_form_validation');

我得到了另一个Unable to load the requested class: Student_registration_form_validation

2 个答案:

答案 0 :(得分:1)

将此篇文章放在APPPATH.'config/config.php'文件

的末尾
spl_autoload_register(function ($class) {
    //this block you can skip
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH.'core/'.$class.'.php')) {
            include $file;
        }
    }

    //this block is what you need
    if (substr($class,0,3) !== 'CI_') {
        if (file_exists($file = APPPATH.'libraries/'.$class.'.php')) {
            include $file;
        }
    }
});

这样,您甚至无法设置配置文件的预定义MY_前缀。 将您的文件和类命名为:

Student_registration_form_validation.php | Student_registration_form_validation
Student_cancellation_form_validation.php | Student_cancellation_form_validation

Some_controller_code.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Some_controller_code extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        //you have to load form_validation library first
        //if custom libraries are extending it
        $this->load->library('form_validation');
        $this->load->library('student_registration_form_validation');

        //example of using method from native form_validation library
        if ( $this->student_registration_form_validation->set_message('rule1', "Some message here") )
            echo 'It\'s working';
    }
}

答案 1 :(得分:0)

好孩子,我现在明白了。

  1. 使用前缀MY_或您在application/config/config.php文件中声明的任何内容创建自定义表单验证类。例如,CI {x。MY_Student_registration_form_validation内的application/libraries

    $config['subclass_prefix'] = 'MY_';
    
  2. 在你的控制器中(我将在这里使用控制器,因为我没有在模型上测试它),你可以通过以下方式加载这个自定义类:

    $this->load->library('my_student_registration_form_validation');
    
  3. 您现在可以通过以下方式使用其方法:

    $this->my_student_registration_form_validation->validate_student();