我的模型中有一个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?提前感谢!
答案 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();