CodeIgniter: custom validation rules can't be

2019-06-01 19:41发布

问题:

I've created a "validation helper" that was supposed to have all my custom validation rules. The problem is that when I use them in my form validation, they seem to be ignored. If I move the functions in the controller that is doing the form validation, everything works like a charm. My validation helper is autoloaded.

Is there any reason why I can't seem to use these validation functions if I put them in a helper? Thanks.

回答1:

A function in a helper and a controller are different obviously.

Create an extended MY_Form_validation.php in your libraries/, add the functions there and finally set the rules without callback_ and just their function name.

Example:

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

class MY_Form_validation extends CI_Form_validation {

    /* set_rule('custom_require') */
    function custom_require($str) {

        return (bool)$str;

    }

}


回答2:

Robin's answer is the easiest way to deal with it; however, the why you can't is this:

look in your system/libraries/Form_Validation.php, line: 587

if ( ! method_exists($this->CI, $rule))
{
  continue;
}

This check is done on all callbacks. Helpers are not classes & not loaded into the CI instance - and so not available from the Form_Validation library (because of the way it is specifically coded in this method)