【发布时间】:2013-06-23 19:59:27
【问题描述】:
我想添加一个自定义验证规则,必要时可以在整个应用程序中重复使用。放在哪里最好?
我知道我可以将它们放在 AppModel 中,但它很混乱,并且使用仅偶尔用于验证的方法污染/膨胀 AppModel,我发现我需要在它们前面加上 validateUsername、validateCustom 等。使它们与 AppModel 中的其他方法清晰地组织起来。我觉得在 OOP 结构中有更好的方法来做到这一点。
例如,有没有办法将自定义规则指定为Lib 类的静态方法?
例如
app/Lib/Validate.php
class Validate {
public function username($value) {
$value = array_shift($value);
return preg_match('/^[A-Z0-9_-]+$/i', $value);
}
}
然后在需要时仅在模型中使用规则:
app/Model/MyModel.php
App::uses('Validate', 'Lib');
class MyModel extends AppModel {
public $validate = array(
'username' => array(
'rule' => 'Validate::username',
'message' => 'Username contains invalid characters'
)
);
}
【问题讨论】:
-
我通常将它们直接放在我的 MyModel 中。但是,是的,一个自己的 lib 类会更干净。不过要小心:验证为类名已被核心使用。 cake2.x 需要 MyValidate 等
-
您也可以在它自己的存储库中制作一个插件,然后简单地将该插件包含在您需要的任何应用程序中。这样你就可以重复使用它。
标签: validation cakephp cakephp-2.0 cakephp-2.3