0

假设我有模型 A ..那么这个模型 A 被许多控制器使用...现在我想实现 afterSave 方法,只在使用模型 A 的控制器之一中。例如,在控制器 C 中它调用 save() 函数,所以我希望仅在该函数中调用 afterSave。那是怎么回事?

protected function afterSave()
{
    parent::afterSave();
    if($this->isNewRecord)
    {
        echo "hello";
        exit;
    }
}

因为: afterSave() 影响所有使用模型 A 的控制器的所有 save() 调用

4

2 回答 2

2

你可以在你的afterSave函数中尝试这个:

if (Yii::app()->controller->id!=='yourcontroller')
{
  // do what you want
}

如果需要,您还可以测试Yii::app()->controller->action->id.

编辑:或者看看Jelle de Fries的回答。

于 2013-03-21T09:29:15.043 回答
2

我不明白为什么你需要一个 afterSave() 方法。在您的操作中,您正在调用 $model->save()。打电话后你不能做你必须做的事情吗?像这样:

public function actionMyAction(){
    $model=new myModel;
    $model->attribute = 5;
    $model->save();
    $model->doLogicAfterSave(); //<-this
    $this->render('myView',array(
        'model'=>$model,
    ));
}

因为它仅适用于 1 个控制器。

于 2013-03-21T12:52:28.630 回答