【问题标题】:CodeIgniter: custom validation rules can't be in a helper?CodeIgniter:自定义验证规则不能在助手中?
【发布时间】:2012-05-18 12:42:55
【问题描述】:

我创建了一个“验证助手”,它应该包含我所有的自定义验证规则。问题是当我在表单验证中使用它们时,它们似乎被忽略了。如果我在进行表单验证的控制器中移动函数,一切都会像魅力一样工作。我的验证助手是自动加载的。

如果我将这些验证功能放在帮助程序中,是否有任何理由无法使用它们?谢谢。

【问题讨论】:

    标签: codeigniter codeigniter-2


    【解决方案1】:

    helper和controller中的函数明显不同。

    在你的libraries/ 中创建一个extended MY_Form_validation.php,在那里添加函数,最后设置规则没有 callback_ 和它们的函数名称。

    示例:

    <?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;
    
        }
    
    }
    

    【讨论】:

    • 文件应命名为MY_Form_validation.php,而不是My_Form_validation.php。注意MY_ 中的大写Y
    • 我创建了一个名为validations.php 的库,在其中我写了“class Validations extends CI_Form_validation {”。我写了类似“trim|required|enforce_password_policy”的规则。但事情是行不通的。 :(请帮帮我。
    • 您可能必须将其命名为 MY_Form_validation.php 而不是 validations.php 否则 CodeIgniter 将找不到该文件。
    • 它给出了一个错误提示:无法找到验证规则:enforce_password_policy
    • 听起来像是您自己在某处设置的自定义规则。如果这是您的目标,请为它创建一个函数。
    【解决方案2】:

    罗宾的回答是最简单的处理方法;然而,为什么你不能这样做:

    查看您的系统/库/Form_Validation.php,行:587

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

    对所有回调进行此检查。助手不是类,也没有加载到 CI 实例中 - 因此不能从 Form_Validation 库中获得(因为它在此方法中的具体编码方式)

    【讨论】:

      猜你喜欢
      • 2012-01-01
      • 2020-07-02
      • 2011-03-19
      • 2019-11-21
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多