Validation cakephp:将变量传递给自定义验证规则
我目前在PHP5.3.27上使用CakePHP2.4.5,如果需要,两者都可能会更改(但如果不更改则更好) cakephp模型中的自定义验证规则需要外部数据才能工作,例如:Validation cakephp:将变量传递给自定义验证规则,validation,cakephp,syntax-error,Validation,Cakephp,Syntax Error,我目前在PHP5.3.27上使用CakePHP2.4.5,如果需要,两者都可能会更改(但如果不更改则更好) cakephp模型中的自定义验证规则需要外部数据才能工作,例如: public $nameSpecialChars = '\'- '; public $dotWhitespace = '. '; public $timeLabels = array('Jahr', 'month', 'jour', 'minuta'); public $tlSeparator =
public $nameSpecialChars = '\'- ';
public $dotWhitespace = '. ';
public $timeLabels = array('Jahr', 'month', 'jour', 'minuta');
public $tlSeparator = ', ';
理想情况下,这些将在其他地方定义,但在模型文件的顶部就足够了
我们的想法是,他们以后可能会改变。>例如,nameSpecialChars<用于定义可能出现在人名中的特殊字符;>'<的同义词可能包括,>''Error:syntax Error,意外的T_变量,应为''
在“规则”行生成致命错误:>错误:语法错误,
意外的T_变量,应为“')”使用:
定义(,);
基于php的页面生成是在页面请求时生成超文本-没有理由不递归使用(在生成php文件时定义模板空间,在页面请求之前将运行时常量插入模板空间)
将标准值写入生成php文件,以便始终有一个有效条目:
定义(“nameSpecialChars”,“|”,“[\'-\s]”);
需要时,使用正则表达式或类似表达式替换值
public $validate = array(
'street' => array(
'required' =>true ,
'allowEmpty'=>false,
'rule' =>array('isName', $nameSpecialChars)
)
);
// Names must contain only letters and a couple of special characters.
// note on UTF8 handling pre-php6: https://stackoverflow.com/a/16862181/3434465
// whole thing should be reworked once proper UTF8 support is available
public function isName($check, string $allowedSpecialChars)
{
setlocale(LC_CTYPE, 'utf8'); // to ensure correct ctype_alpha evaluation;
// may change arbitrarily during server operation, thence always ensure it be set
if(mb_substr($allowedSpecialChars, -1) != 'u')
{
$allowedSpecialChars = $allowedSpecialChars . 'u'; // ensure that UTF8-flag is set
}
$name = array_values($check)[0]; // reduce to input string; bit of a hack, better replace once better way found
$charArray = preg_split("//u", $name, -1, PREG_SPLIT_NO_EMPTY); // theoretically UTF8-aware split
bool validCharacters = true;
foreach($charArray as $char) // not quite UTF8 compatible, I fear
{
validCharacters = validCharacters && (
ctype_alpha($char) // UTF8-aware due to locale
||
preg_match($allowedSpecialChars, $char, null) // UTF8-aware due to terminating 'u'-flag
);
}
return validCharacters;
}