5

我的模型中有一个 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]);

} 

如何在保存后重定向?提前致谢!

4

5 回答 5

3

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

您只需在 Controller-Action 中执行此操作 -

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

于 2014-05-02T10:53:32.110 回答
1

你的控制器没问题,但我在你的“afterSave”方法中看到了一些奇怪的东西。有

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

首先,标准 ActiveRecord “保存”必须将布尔值作为其第一个参数。接下来是你将在这里得到递归——因为在“save”方法中调用了“afterSave”方法。

所以我想真正的问题是你没有显示任何错误。在包含 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');

这只是为了开发。

于 2015-02-24T06:45:19.957 回答
0

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

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

于 2014-12-09T09:09:33.993 回答
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']);
    }
}
于 2015-10-04T19:19:55.400 回答
-2

尝试return $this->redirect();

于 2015-02-24T05:48:47.497 回答