我正在制作一个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
答案 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)
替换该函数的正文。