【问题标题】:Codeigniter return validation error from helperCodeigniter 从帮助程序返回验证错误
【发布时间】:2011-09-12 03:52:08
【问题描述】:

我正在制作一个 URL 验证助手,我在表单验证中将其设置为规则。

$this->form_validation->set_rules('link_url', 'Link URL', 'trim|required|xss_clean|max_length[255]|validate_url');

如果 validate_url 返回 FALSE 如何从帮助程序返回自定义验证错误?

助手

if ( ! function_exists('validate_url'))
{
    function validate_url($str)
    {
       $pattern = "/^(http|https):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i";
        if (!preg_match($pattern, $str))
        {
            $this->form_validation->set_message('validate_url', 'URL is not valid');
            return FALSE;
        }
        else 
        {
            return TRUE;
        }
    }
}

当我提交表单时,我得到了

Fatal error: Using $this when not in object context

【问题讨论】:

    标签: php validation forms codeigniter


    【解决方案1】:

    正如@alex 提到的,您正在尝试在函数中调用对象,您可以通过使用返回超级对象的 get_instance() 来避免此错误。 我不确定您是否可以将此辅助函数用作 form_validation 库中的回调。

    代码如下:

    if ( ! function_exists('validate_url'))
    {
        function validate_url($str)
        {
            $ci = get_instance();
    
           $pattern = "/^(http|https):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i";
            if (!preg_match($pattern, $str))
            {
                $ci->form_validation->set_message('validate_url', 'URL is not valid');
                return FALSE;
            }
            else 
            {
                return TRUE;
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您正在创建一个全局函数,而不是对象的方法。

      在这种情况下,$this 不指向任何实例化对象。要在对象上设置消息,您需要将 $this 更改为验证对象。

      您可以将该函数的主体替换为return (bool) parse_url($str)

      【讨论】:

        猜你喜欢
        • 2011-10-17
        • 2011-02-23
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 2015-09-08
        相关资源
        最近更新 更多