我想重写标准 URL 验证规则,使其更能容忍 URL 之前或之后的空白字符。基本上在将 url 传递给标准 URL 验证处理程序之前使用 trim() 函数。
我知道我需要推翻该规则,但我不知道我需要在哪里以及如何做到这一点。
(另外,CakePHP API 和书籍文档目前已离线。升级,我知道......)
您可以在模型类、行为类或 AppModel 类中添加自定义验证规则:
http://book.cakephp.org/view/150/Custom-Validation-Rules#Adding-your-own-Validation-Methods-152
由于您想覆盖现有方法,只需为其指定与原始方法相同的名称和签名即可。像这样的事情可能会成功:
function url($check, $strict = false) {
return Validation::url(trim($check), $strict);
}
你为什么要这么做? 只需确保所有发布的数据始终被修剪即可。 无论如何,这更干净、更安全。
我有一个组件在 beforeFilter 中执行此操作:
/** DATA PREPARATION **/
if (!empty($controller->data) && !Configure::read('DataPreparation.notrim')) {
$controller->data = $this->trimDeep($controller->data);
}
trimDeep方法:
/**
* @static
*/
function trimDeep($value) {
$value = is_array($value) ? array_map(array(&$this, 'trimDeep'), $value) : trim($value);
return $value;
}