Php Yii模型验证规则

Php Yii模型验证规则,php,yii,Php,Yii,yii验证规则有一个问题,我为我的产品创建了一个带有优惠券代码的注册表单。当用户输入优惠券代码时,我想检查优惠券表中是否存在该值。 当用户输入couponcode时,我希望我的验证规则起作用,否则,如果用户未输入代码,此验证规则不应起作用,对于会员注册,我有一个会员模型,对于优惠券,我有一个优惠券模型, 我在验证规则中使用此方法 class MemberSignup extends CActiveRecord { public $couponcode; public funct

yii验证规则有一个问题,我为我的产品创建了一个带有优惠券代码的注册表单。当用户输入优惠券代码时,我想检查优惠券表中是否存在该值。 当用户输入couponcode时,我希望我的验证规则起作用,否则,如果用户未输入代码,此验证规则不应起作用,对于会员注册,我有一个会员模型,对于优惠券,我有一个优惠券模型, 我在验证规则中使用此方法

class MemberSignup extends CActiveRecord
{
    public $couponcode;

    public function rules(){
        array('couponcode', 'isCouponCodeExist'),
    }//end rules

    public function isCouponCodeExist($attribute, $params)
    {       
        $record = Coupon::model()->findByAttributes(array('couponcode' => $this->couponcode));

        if($record === null){
            $this->addError($attribute, 'Invalid Coupon');
            return false;
        }

        return true;
    }
} //class end
任何建议对我都有帮助



如果我正确理解了您的意思,则不需要您的couponcode,您希望仅在用户输入了couponcode时验证couponcode

public function rules()
{
   return array(
        array('field1, field2, field3', 'required'),
        array('couponcode', 'isCouponCodeExist'),
    );
}
编辑:

在yii中,将执行模型中的所有验证方法,即使正在验证的字段不是必需的。即使您的字段
couponcode
不是必需的,验证方法
isCouponCodeExist()
也将始终执行

这意味着我们必须在方法
isCouponCodeExist()
中编辑您的代码,以允许空的耦合代码,类似这样的一点:

public function isCouponCodeExist($attribute, $params)
{
    if(!empty($this->couponcode))  
    {     
        $record = Coupon::model()->findByAttributes(array('couponcode' => $this->couponcode));

        if($record === null)
        {
            $this->addError($attribute, 'Invalid Coupon');
        }
    }
 }

此外,在验证方法中不必返回true或false。如果出现错误,您只需添加一个错误。

如果我理解正确,则不需要您的couponcode,并且您希望仅在用户输入了couponcode时验证couponcode

public function rules()
{
   return array(
        array('field1, field2, field3', 'required'),
        array('couponcode', 'isCouponCodeExist'),
    );
}
编辑:

在yii中,将执行模型中的所有验证方法,即使正在验证的字段不是必需的。即使您的字段
couponcode
不是必需的,验证方法
isCouponCodeExist()
也将始终执行

这意味着我们必须在方法
isCouponCodeExist()
中编辑您的代码,以允许空的耦合代码,类似这样的一点:

public function isCouponCodeExist($attribute, $params)
{
    if(!empty($this->couponcode))  
    {     
        $record = Coupon::model()->findByAttributes(array('couponcode' => $this->couponcode));

        if($record === null)
        {
            $this->addError($attribute, 'Invalid Coupon');
        }
    }
 }

此外,在验证方法中不必返回true或false。如果出现问题,您只需添加一个错误。

您是如何实例化此模型的?您是如何实例化此模型的?
array('member\u login,member\u password,gateway\u id,confPassword,email,first\u name,packageid,agreed,trafficesource','required'),array('coupcode','iscoupondeexist'),
如果我留下空的优惠券代码字段,它会返回此错误“请修复以下输入错误:无效优惠券”这些是
rules()
方法中仅有的两条规则吗?不,像这样的3个数组。`数组('member\u login,member\u password,gateway\u id,confPassword,email,first\u name,packageid,agreed,trafficesource','required'),数组('couponcode','iscoupondeexist'),数组('member\u id,member\u login','safe','on'=>'search'),'谢谢老兄,我找到了解决方案-我原来的帖子错了。我将编辑它以显示正确答案。解决方案是我发布的第一个答案,我编辑它以包含正确答案。您只能更改
isCouponCodeExist()
方法。看看<代码>数组('member\u login,member\u password,gateway\u id,confPassword,email,first\u name,packageid,agreed,trafficesource','required'),数组('coupcode','iscoupondeexist'),
如果我留下空的优惠券代码字段,它会返回我这个错误“请修复以下输入错误:无效优惠券”是
规则()中仅有的两条规则
method?不,像这样的3个数组数组('member\u login,member\u password,gateway\u id,confPassword,email,first\u name,packageid,agreed,trafficesource','required'),数组('couponcode','iscoupondeexist'),数组('member\u id,member\u login','safe','on'=>'search'),'谢谢老兄,我找到了解决方案-我原来的帖子错了。我将编辑它以显示正确答案。解决方案是我发布的第一个答案,我编辑它以包含正确答案。您只能更改
isCouponCodeExist()
方法。过来看!