Я хочу переопределить метод валидации 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 все еще использовал старый метод.