在模型yii2中返回afterSave

时间:2017-03-17 15:43:51

标签: yii2

如果有一个控制器yii2有一个模型,例如,只有轮廓:

class MyController class extends Controller {
    public function actionCreate() {
        $valid = $model->validate();
    }
}

需要从aftersave返回,这是一条消息,指示是否能够发送电子邮件,并且插入了所有属性。

在模型中保存:

public function afterSave($insert, $changedAttributes) {
    if(!$this->isNewRecord) {
        try {
            Yii::$app->mailer->compose()
                // email composition here
                ->send();

            return 'mail sent';
        catch (\Swift_SwiftException $exception) {
            return 'email undeliverable'. $exception->getMessage();
        }
    }
}

可以通过控制器访问afterSave的返回吗?

2 个答案:

答案 0 :(得分:0)

不,您将无法访问任何这些消息,因为:

  1. 在您致电$model->validate()的控制器中,永远不会调用afterSave()。您需要致电$model->save()
  2. afterSave()不应返回任何内容,因此您返回的值将丢失。请参阅官方文档here
  3. 中的函数定义

答案 1 :(得分:0)

不,它不会用您的代码触发afterSave事件。 {2}正在触发\yii\db\BaseActiveRecord::afterSave

  1. \yii\db\BaseActiveRecord::updateInternal
  2. \yii\db\ActiveRecord::insertInternal
  3. 如果你看一下\yii\base\Model::validate,你会发现afterSave没有在这里打电话。