在yii2中的afterSave重定向

时间:2014-05-02 09:26:16

标签: php yii2

我的模型中有一个afterSave函数,它根据用户给出的开始时间和持续时间保存某些服务的到期日期。我的afterSave工作正常,但保存模型后却没有重定向,而是显示空白页。

型号:

public function afterSave($insert)
{

    $month= "+".$this->duration_in_months." month";
    $this->exp_date=date("Y-m-d H:i:s",strtotime($month));
    $this->save(['exp_date']);

    return parent::afterSave($insert);
} 

控制器:

if($model->save())

    return $this->redirect(['view', 'id' => $model->sub_id]);

} 

如何重定向afterSave?提前感谢!

5 个答案:

答案 0 :(得分:3)

正确的方法是从Controller调用save(),它将隐式调用afterSave()

您只需在Controller-Action -

中执行此操作

if($model->save()) { $this->redirect(......); }

答案 1 :(得分:1)

你的控制器没问题,但我看到你的" afterSave"方法。 有

$this->save(['exp_date'])

首先是标准的ActiveRecord"保存"必须有boolean作为它的第一个参数。 接下来你将在这里得到递归 - " afterSave"内部调用方法" save"方法

所以我认为真正的问题是你没有显示任何错误。在包含Yii:

之前,尝试在index.php中启用错误报告
error_reporting(E_ALL);
ini_set('display_errors', '1');
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

这只适用于开发。

答案 2 :(得分:0)

您可以使用\Yii::$app->response->redirect('url')->send()从任何地方进行重定向。

您的应用显示空白页面,因为您在$this->save(['exp_date'])中致电afterSave()。它再次调用afterSave()并导致无限循环。你应该避免这种情况。

答案 3 :(得分:0)

我遇到了同样的问题。但它在以下方面得到了解决:

public function afterSave($insert, $changedAttributes)
{
    parent::afterSave($insert, $changedAttributes);

    if ($insert) {
        $month = "+".$this->duration_in_months." month";
        $this->exp_date = date("Y-m-d H:i:s", strtotime($month));
        $this->save(false, ['exp_date']);
    }
}

答案 4 :(得分:-2)

尝试return $this->redirect();