Redirection to the same page
$this->redirect current page yii
Допустим вы редактируете многостраничный раздел, вы дошли до страницы 6, и решили обновить одну из записей смотри рисунок 1.
По умолчанию в Yii, после обновления записи, вас перебрасывает на страницу детального просмотра, обновленной вами информации смотри рисунок 2. Это не удобно, поэтому есть решение, чтобы после обновления информации вас перекинуло обратно на предыдущую открытую вами страницу.
Решение довольно просто, работает даже если у вас включен Ajax в Grid:
К примеру возьмем код:
public function actionUpdate($id) {
$model = $this->loadModel($id);
if (isset($_POST[‘Params’])) {
$model->attributes = $_POST[‘Params’];
if (empty($model->translit)) {
$model->translit = $this->translitIt($model->name);
}
if ($model->save())
$this->redirect(array(‘view’, ‘id’ => $model->id));
}
$this->render(‘update’, array(
‘model’ => $model,
));
}
Нам важен момент
if ($model->save())
$this->redirect(array(‘view’, ‘id’ => $model->id));
После сохранения, вас будет перекидывать на страницу просмотра отредактированной вами информации.
Чтобы после сохранения вас перекинуло на страницу которую вы открыли, вам нужно за место
$this->redirect(array(‘view’, ‘id’ => $model->id));
Написать
$this->redirect(Yii::app()->user->getState(‘prevAdminUrl’));
что бы этот код вернул ссылку на предыдущую страницу, на ней(на предыдущей странице):
Yii::app()->user->getState(‘prevAdminUrl’)
надо выполнить следующее выражение:
Yii::app()->user->setState(‘prevAdminUrl’, Yii::app()->request->url); // Пишет текущий url в сессию
В итоге в нашем примере получаем код обновления страницы, после чего нас перебрасывает обратно на предыдущую страницу
Код:
public function actionUpdate($id) {
$model = $this->loadModel($id);
if (isset($_POST[‘Params’])) {
$model->attributes = $_POST[‘Params’];
if (empty($model->translit)) {
$model->translit = $this->translitIt($model->name);
}
if ($model->save())
$this->redirect(Yii::app()->user->getState(‘prevAdminUrl’));
}
$this->render(‘update’, array(
‘model’ => $model,
));
}
Код записывает предыдущий url в текущую открытую сессию:
public function actionUpdate($id) {
$model = $this->loadModel($id);
if (isset($_POST[‘Params’])) {
$model->attributes = $_POST[‘Params’];
if (empty($model->translit)) {
$model->translit = $this->translitIt($model->name);
}
if ($model->save())
$this->redirectYii::app()->user->setState(‘prevAdminUrl’, Yii::app()->request->url));
}
$this->render(‘update’, array(
‘model’ => $model,
));
}
Просмотров: 3073