Php 如何使用codeigniter在单个文件中分离回调逻辑?

Php 如何使用codeigniter在单个文件中分离回调逻辑?,php,codeigniter,Php,Codeigniter,我使用config.php来存储所有的form_验证规则……但是我也想将回调函数存储在一个文件中,我如何才能做到这一点?有什么想法吗?谢谢你 现在我的文件是这样的: 用户控制器 在user controller下,有许多自定义回调函数是有效的,但我准备移动config.php中的所有规则。我想将_有效回调放在一个类中。多谢各位 在这种情况下,我要做的就是创建一个MY_Form_验证类来扩展CodeIgniter的表单验证。在新创建的MY_Form_验证文件中放置“_valid”检查,并以与默认F

我使用config.php来存储所有的form_验证规则……但是我也想将回调函数存储在一个文件中,我如何才能做到这一点?有什么想法吗?谢谢你

现在我的文件是这样的:

用户控制器
在user controller下,有许多自定义回调函数是有效的,但我准备移动config.php中的所有规则。我想将_有效回调放在一个类中。多谢各位

在这种情况下,我要做的就是创建一个MY_Form_验证类来扩展CodeIgniter的表单验证。在新创建的MY_Form_验证文件中放置“_valid”检查,并以与默认Form_验证规则相同的方式设置“_valid”检查的规则

类似于

class MY_Form_validation extends CI_Form_validation {

    function valid_user($str)
    {

    } 

    function valid_password($str)
    {

    }  
} 

默认情况下,Form_验证库使用它的
$CI
属性查看回调方法是否存在。通常这会查看当前控制器。但是,您可以通过扩展验证类并更改
run()
方法来更改此行为

class MY_Form_validation extends CI_Form_validation {

    /**
     * Support for validation callbacks from any object
     * 
     * @access      public
     * @param       object      The object to run callbacks from
     * @param       string      Is there a validation rule for the particular URI being accessed?
     * @return      bool        Validation status
     */
    function run($obj = '', $group = '')
    { 
        // Assign the callback object
        if (is_object($obj)) $this->CI =& $obj;

        // Run the validation as normal
        return parent::run($group);
    }

}
我们只是重新分配
$CI
属性。例如,要使用名为
user\u validation
的类的回调,可以执行以下操作:

$callback_class = $this->user_validation;
if ($this->form_validation->run($callback_class)) {}
任何加载的类都可以工作,因此您可以将回调规则存储在模型或库中,只需将要处理回调的对象传递给
run()
方法即可

class MY_Form_validation extends CI_Form_validation {

    /**
     * Support for validation callbacks from any object
     * 
     * @access      public
     * @param       object      The object to run callbacks from
     * @param       string      Is there a validation rule for the particular URI being accessed?
     * @return      bool        Validation status
     */
    function run($obj = '', $group = '')
    { 
        // Assign the callback object
        if (is_object($obj)) $this->CI =& $obj;

        // Run the validation as normal
        return parent::run($group);
    }

}