如何只对特定的控制器动作实现afterSave方法?

时间:2013-03-21 09:19:59

标签: yii

让我们说我有模特A ..然后这个模型A被许多控制器使用...... 现在我想实现afterSave方法,只在其中一个使用的控制器中实现 模特A.例如在Controller C中它调用了save()函数,所以我希望只在那个函数中调用afterSave。那是什么?

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

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

2 个答案:

答案 0 :(得分:2)

您可以在afterSave函数中尝试此操作:

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

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

编辑:或者看一下 Jelle de Fries 的答案。

答案 1 :(得分: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个控制器。