我有一些验证方法需要用于多个模型。例如,可以跨多个模型共享电话号码的验证。
我从http://www.yiiframework.com/wiki/56/了解到,我可以创建一个可供多个模型使用的扩展程序,例如:
array('phone', 'ext.Validate.Validate'),
我已经修改过几次这行,可以确认它是正确的文件。
使用Validate.php中的以下内容
class Validate
我收到错误Call to undefined method Validate::applyTo()
,因此我将其更改为
class Validate extends CValidator
正如上面的链接所示,但我现在得到错误:
Class Validate contains 1 abstract method
这是现有的文件:
<?php
class Validate extends CValidator
{
public function phone($phone)
{
if(!ctype_digit($phone))
{
$this->addError($phone, Yii::t('flash','flash.not_authorised',array('{attribute}'=>$phone)).' '.ucfirst(str_replace('_', ' ', $phone)).' field');
}
else
{
return true;
}
}
}
有人可以指出我如何使用上述方法在多种方法之间进行共享验证。
答案 0 :(得分:0)
好的,我设法解决了这个问题。
我在搜索http://www.yiiframework.com/wiki/56/
几个小时后发现了以下内容主要问题是,在扩展CValidator时,您需要在类中使用以下方法:
protected function validateAttribute($object,$attribute)
{
}
这是型号代码(yii / protected / extension / Validate / Validate.php)
array('phone', 'ext.Validate.Validate'),
这是类代码:
<?php
class Validate extends CValidator
{
protected function validateAttribute($object,$attribute)
{
self::{$attribute."Validation"}($object,$attribute);
}
protected function phoneValidation($object,$attribute)
{
if(!empty($object->$attribute))
{
if(!ctype_digit($object->$attribute))
{
$this->addError($object,$attribute,Yii::t('app','validation.telephon_failed',array('{attribute}'=>ucwords($attribute))));
}
}
}
}