Codeigniter从帮助程序返回验证错误

时间:2011-06-10 01:13:52

标签: php validation forms codeigniter

我正在制作一个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

2 个答案:

答案 0 :(得分:4)

正如@alex提到的那样,你试图在一个函数中调用一个对象,你可以通过使用返回超级对象的get_instance()来避免这个错误。 我不确定你是否可以使用这个辅助函数作为form_validation lib中的回调函数。

这是代码:

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

答案 1 :(得分:1)

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

在该上下文中,$this未指向任何实例化对象。要在对象上设置消息,您需要将$this更改为验证对象。

您可以使用return (bool) parse_url($str)替换该函数的正文。