不,组件不适用于模型。我为我的自定义验证规则所做的是向 AppModel 添加方法。然后,您可以在模型的任何验证数组中使用它们。
如果您还不知道如何使用它们,请参阅有关制作自定义验证方法的 Cake book 部分:
http://book.cakephp.org/2.0/en/models/data-validation.html#adding-your-own-validation-methods
但是,不要将方法放入您需要的每个模型中,而是将其放入您的 AppModel 中(如果您没有 AppModel 类,请创建如下所示的类并将其保存到app/Model/AppModel.php
。您的所有模型都将继承此类,所以您的自定义验证方法将可用于任何模型。)
这是一个简单的例子:
/**
* app/Model/AppModel.php
*/
class AppModel extends Model {
/**
* Validation rule for integers
*
* @param mixed $value
* @return bool
*/
public function validateInteger($value) {
return preg_match('/^\d+$/', array_shift($value));
}
}
/**
* app/Model/MyModel.php
*/
class MyModel extends AppModel {
/**
* Validation
*
* @var array
*/
public $validate = array(
'my_field' => array(
'rule' => 'validateInteger',
'message' => 'This field only accepts integers'
)
);
}
我还玩弄了一个自定义验证行为的想法,其中包含所有这些验证方法,但由于行为的限制,我发现它不是特别好,也不是那么方便。