#php #validation #forms #codeigniter
#php #проверка #формы #инициатор кодирования #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
Ответ №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)
.