Разобрался с redirectUrl
. Хотел при удалении свойства записи передать в этом параметре ссылку на страницу данной записи. У меня есть база приборов, для которых учитываются результаты прохождения госповерок. При удалении редирект по умолчанию идет на админскую страницу поверок, что немного сбивает пользователя с толку. Он работал с информацией о приборе, а попадает на список поверок.
Оригинальное меню на странице check/view
выгдялит так:
$this->menu=array(
array('label'=>'Список всех поверок', 'url'=>array('index')),
array('label'=>'Изменить', 'url'=>array('update', 'id'=>$model->id)),
array('label'=>'Удалить', 'url'=>'#',
'linkOptions'=>array(
'submit'=>array('delete','id'=>$model->id),
'confirm'=>'Точно удалить?')),
array('label'=>'Управление', 'url'=>array('admin')),
);
Ссылку на экшн delete
достаточно модифицировать следующим образом:
array('label'=>'Удалить', 'url'=>'#',
'linkOptions'=>array(
'submit'=>array('delete','id'=>$model->id),
'params'=>array(
'returnUrl'=>$this->createUrl(
'device/view', array(
'id'=>$model->device->id))),
'confirm'=>'Точно удалить?')),
Добавив передачу параметра returnUrl
, мы даем методу контроллера delete
возможность перенаправить нас на нужную страницу device/view
по окончанию операции удаления. ID нужной нам страницы мы получаем через связь ActiveRecord $model->device->id
. Ссылку создаем методом createUrl
, передавая туда нужный нам контроллер, его метод и ID.
Стандартный метод delete
контроллера выглядит слудющим образом:
public function actionDelete($id)
{
if(Yii::app()->request->isPostRequest)
{
$this->loadModel($id)->delete();
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}
В восьмой строке как раз и происходит обработка переданного нами параметра returnUrl
.