Редирект из виджета

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Редирект из виджета

Сообщение maleks »

Смотрю в доках когда про редирект говорится, то описывается что в действии контроллера надо вместе с return вызывать:

Код: Выделить всё

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]); 
Но мне надо в виджете обработать данные и редиректнуть. Виджет этот естественно выводится в виде некоего действия.
Смотрю что нормально редиректит если так сделать:

Код: Выделить всё

class SomeWidget extends \yii\base\Widget
{
    public function run()
    {
        if (что то) {
            $this->view->context->redirect('aaa');
        }
 
Никаких аномальных ситуаций в принципе не должно же быть при таком подходе?
Yii2 universal module sceleton - for basic and advanced templates
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Редирект из виджета

Сообщение lynicidn »

ситуций аномальных не будет, но вот читабельность не ахти, лучше
if (чтото){
//redirect
} else {
//render widget
}
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Редирект из виджета

Сообщение zelenin »

а лучше
if(...) {
redirect
}
default behavior
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Редирект из виджета

Сообщение maleks »

в том то и печаль, что форма находится в виджете.
Виджет может на разных страницах быть.
Так что для него как бы нет "своего" контроллера и текущему действию контроллера все равно придется выполниться по полной.
Yii2 universal module sceleton - for basic and advanced templates
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Редирект из виджета

Сообщение zelenin »

maleks писал(а):в том то и печаль, что форма находится в виджете.
Виджет может на разных страницах быть.
Так что для него как бы нет "своего" контроллера и текущему действию контроллера все равно придется выполниться по полной.
остается спросить: и? вы хотите сделать редирект, вы его делаете. в чем проблема?
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Редирект из виджета

Сообщение maleks »

смущает что объект Response наполняется данными по результату работы экшена.
И вдруг есть какая то ситуация когда из экшена отменится тот редирект который я задал где то внутри.

На самописах то редирект - это посылаются заголовки и die(), а в yii2 все как то сложнее с этим, после ->redirect() код еще может выполняться.
Yii2 universal module sceleton - for basic and advanced templates
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Редирект из виджета

Сообщение maleks »

в общем понял что надо еще yii::$app->end(); вызывать после редиректа в этой ситуации.
Yii2 universal module sceleton - for basic and advanced templates
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Редирект из виджета

Сообщение zelenin »

maleks писал(а):в общем понял что надо еще yii::$app->end(); вызывать после редиректа в этой ситуации.
полезно
Dr2005alex
Сообщения: 1
Зарегистрирован: 2021.07.13, 09:10

Re: Редирект из виджета

Сообщение Dr2005alex »

Все на много проще:

Код: Выделить всё

Yii::$app->controller->redirect(['view', 'id' => $model->id]); 
Ответить