2015-12-17 01:37:35 3005次浏览 1条回答 0 悬赏 666 金钱

请各位朋友给一个简单但完整的例子。

关于事件和行为,本人愚钝,请给出代码。谢谢。

场景如下:
model_a->agemodel_b->card_number

model_a EVENT_BEFORE_VALIDATE/或自定义事件 时触发,

触发后,根据model_b->card_number值,计算出age并赋值给model_a->age.

谢谢。

  • 回答于 2015-12-20 23:47 举报

    Controller

    	//..
    	use yii\web\Controller;
    	use app\models\Model_a;
    	use app\models\Model_b;
    
    	class Change_val extends Controller{
    
    	public function ans()
    	{	
    	    	$model_a = new Model_a();
    	    	$model_a->age = 10; 
    	    	if($model_a->validate()){
    	    		$model_a->save();
    	    	}
    	}
    

    Model : Model_a

            //..
    	use app\models\Model_b;
    
    	public function beforeValidate()
            {	
        	    if(parent::beforeValidate()){
    	       	    if($this->age){
    	    		    $model_b = Model_b::find()->where(['你的條件(condition)'])->one();
    	    		    $card_number = ....;
    	    		    $this->age = //使用 card_number 值,計算出 age; //並賦值给model_a->age
        		    }
        		    return true;
        	        }
            }
    

    我測過~ 可以的您看看吧

    2 条回复
    回复于 2015-12-22 10:07 回复

    不建议你重写beforeXXXX或afterXXX之类的函数。可以使用$model->on()或Event::on()的形式来注入代码。

    回复于 2015-12-23 12:42 回复


    可是我那樣不算重寫吧 只是用來使用,您的方法我會再試試看
    感覺使用我的方式 是方便每次都需要執行, 用您的方式比較符合
    問題的需求, 我在 try 看看 感謝

您需要登录后才可以回答。登录 | 立即注册
xjdata
CEO

xjdata

注册时间:2011-12-07
最后登录:2024-05-05
在线时长:112小时38分
  • 粉丝23
  • 金钱14169
  • 威望75
  • 积分16039

热门问题