我目前在PHP 5.3.27上使用cakePHP 2.4.5,如果有必要,两者都可能会改变(但如果不是这样会更好)。
我在cakephp模型中的自定义验证规则需要外部数据才能工作,例如:
public $nameSpecialChars = '\'- ';
public $dotWhitespace = '. ';
public $timeLabels = array('Jahr', 'month', 'jour', 'minuta');
public $tlSeparator = ', ';
理想情况下,这些将在其他地方定义,但在模型文件的顶部现在已经足够了。
这个想法是他们可能会在以后改变。 > nameSpecialChars<例如,用于定义可能出现在人名中的特殊字符; >'<的同义词可以包括,>'<,>`<等等。
但是,定义使用它们的规则似乎不起作用:
public $validate = array(
'street' => array(
'required' =>true ,
'allowEmpty'=>false,
'rule' =>array('isName', $nameSpecialChars)
)
);
在'规则'行生成致命错误:>错误:语法错误,意外T_VARIABLE,期待')'<。
我发现将another field作为参数传递可以通过包含带有字段名称的字符串来完成,documentation演示通过写出来传递常量。 - 后者意味着将字符串传递给字符串参数会将其解释为常量,而不是字段名称......或者是吗?
我该如何传递这些变量?
或者:有没有更好的方法来实现这些元素的外部化?
作为参考,这里是引用的自定义规则的功能(请注意它是占位符字符):
// 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;
}
答案 0 :(得分:1)
在'规则'行生成致命错误:>错误:语法错误, 意外的T_VARIABLE,期待')'<。
php basics:你不能在属性声明中使用变量。
将规则添加到beforeValidate()回调中的validate属性。
答案 1 :(得分:0)
使用: define(,); 基于php的页面生成在页面请求上生成超文本 - 没有理由不采用递归方式(在生成php文件时定义模板空间,在页面请求之前插入运行时常量到模板空间中)。
将标准值写入生成php文件,以便始终有一个有效的条目: 定义(" nameSpecialChars",' |'。' [\' - \ s]'); 使用正则表达式或类似方法在需要时替换值。