Переопределить метод проверки в CakePHP - PullRequest
1 голос
/ 19 января 2010

Я хочу переопределить метод валидации url () по умолчанию в CakePHP, поскольку он не позволяет использовать ~ внутренние URL-адреса. Я думал, что будет достаточно объявить метод url () в AppModel, но кажется, что основные методы имеют приоритет по сравнению с пользовательскими.

Я думаю (но я не пробовал) одним из возможных способов было бы использовать

$validate = array('url' => array(
    'rule' => array('Userdefined', 'url'),
    'message' => 'This is not an URL!!!'
));

или что-то в этом роде (каков правильный синтаксис?). Но это не совсем удовлетворительно.

Действительно, я передаю переменную $ validate как объект JSON в свой javascript, а затем соответствующим образом выполняю проверку клиента. В основном я переписал часть проверки CakePHP, автоматическую в javascript. Так что я действительно хочу иметь

$validate = array('url' => array(
    'rule' => 'url',
    'message' => 'This is not an URL!!!'
));

, чтобы не нарушать проверку на стороне клиента.

РЕДАКТИРОВАТЬ: Оказывается, я был не прав. Проблема заключается в том, что методы в Validation вызываются не так, как методы в Model, поэтому при копировании / вставке следует обратить внимание.

Первое отличие в том, что $ check теперь будет массивом вместо строки, но это я уже понял. Чего я не понял, так это того, что другой массив параметров передается в методы валидации в модели. Поскольку подпись url () была

url($check, $strict = false)

В результате $ strict всегда имел значение true, что требовало полных URL-адресов с префиксом протокола. Видя, что предполагаемый URL-адрес с тильдой не проверяется, я предположил, что проблема в том, что CakePHP все еще использовал старый метод.

1 Ответ

1 голос
/ 19 января 2010

Почему бы просто не использовать пользовательскую проверку и создать функцию проверки URL с другим именем?

В противном случае в руководстве сказано, что вы можете переопределить методы классов проверки с помощью функций в AppModel, Model или Behaviors.

Вот соответствующая ссылка в книге.http://book.cakephp.org/view/150/Custom-Validation-Rules#Adding-your-own-Validation-Methods-152

...