Ошибка проверки возврата кода от помощника - PullRequest
2 голосов
/ 10 июня 2011

Я создаю помощника проверки 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 ]

4 голосов
/ 10 июня 2011

Как упомянул @alex, вы пытаетесь вызвать объект внутри функции, любым способом избежать этой ошибки, используя get_instance (), которая возвращает суперобъект. Я не уверен, что вы можете использовать эту вспомогательную функцию в качестве обратного вызова внутри lib в 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;
        }
    }
}
1 голос
/ 10 июня 2011

Вы создаете глобальную функцию, а не метод объекта.

В этом контексте $this не указывает ни на какой экземпляр объекта. Чтобы установить сообщения для объекта, вам нужно изменить $this на объект проверки.

Вы можете заменить тело этой функции на return (bool) parse_url($str).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...