Перенаправление с одного вида на другой - Yii2

Это моя форма на странице просмотра моего сайта.

<?= $form->field($model, 'taskID')->textInput(['readonly' => true, 'value' => Yii::$app->getRequest()->getQueryParam('id')])  ?>   

<?php 
$ifDistributor = User::find()->select('userType')->where(['username'=>Yii::$app->user->identity->username])->andWhere(['userType'=>'Distributer'])->exists();
$ifDistributorHasOnSiteSupport = Distributorinfo::find()->select('hasOnSiteSupport')->where(['UName'=>Yii::$app->user->identity->username])->andWhere(['hasOnSiteSupport'=>1])->exists();
if($ifDistributor)
 if($ifDistributorHasOnSiteSupport)
    echo $form->field($model, 'assignedToID')->dropDownList(
        ArrayHelper::map(dektrium\user\models\User::find()
            ->select('username')
            ->where(['userType'=>'CCE-Distributer'])
            ->andWhere(['distributerID'=>Yii::$app->user->getId()])
            ->all(),'username','username'),['prompt'=>'Select Person']
    );
else {  
                Yii::$app->session->setFlash('error', 
                    "Invalid Page");
                //I WANT TO REDIRECT TO index.php?r=tasks/index THIS URL                    

}                      
?>
<?= $form->field($model, 'remarks') ?>
<?= $form->field($model, 'scheduledTime')->widget(DateTimePicker::classname(), [
                'options' => ['placeholder' => 'Enter event time ...'],
                'pluginOptions' => [
                    'autoclose' => true
                ]
            ])  ?>
<div class="form-group">
    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>

Как показано выше в другой части, я хочу перенаправить на tasks/index этот URL. Помогите мне, как я могу сделать это только в этом Просмотре.


person Choxx    schedule 28.12.2015    source источник
comment
return Yii::$app->response->redirect(Url::to(['path', 'id' => id])); Redirect()   -  person Insane Skull    schedule 28.12.2015
comment
@InsaneSkull Это сработало. Но нужно использовать 'yii\helpers\Url;' Спасибо за ответ.. :)   -  person Choxx    schedule 28.12.2015


Ответы (2)


Используйте Url::to() и не забудьте добавить yii\helpers\Url в заголовок.

Например,

return Yii::$app->response->redirect(Url::to(['path', 'id' => id]));

Redirect()

person Insane Skull    schedule 28.12.2015
comment
И добавлять идентификатор к URL-адресу необязательно. - person Choxx; 28.12.2015

Перенаправления выполняются в контроллерах или некоторых связанных компонентах, но не в представлениях, потому что в этом случае рендеринг не имеет смысла.

В контроллере вы можете использовать более короткую форму:

$this->redirect(['view', 'id' => $id]);

Обратите внимание, что вам не нужно использовать помощника Url::to() для создания URL-адреса, поскольку он уже применяется внутри.

Вы также можете использовать:

Yii::$app->controller->redirect, если контроллер неизвестен, этот метод вызывает Yii::$app->response->redirect как Insane Skull, упомянутый в его ответе.

Взгляните на код контроллера, сгенерированный GII, чтобы увидеть, как используется перенаправление после сохранения/удаления.

person arogachev    schedule 28.12.2015
comment
Спасибо @arogachev. Для получения дополнительной информации об этом. +1 за это. - person Insane Skull; 28.12.2015
comment
@arogachev Это на 100% правильно, что перенаправления выполняются в контроллерах, чтобы следовать полной архитектуре MVC. Но в моем случае мне нужно было сделать это в соответствии с моим требованием. Я пытался сделать это в контроллере, но возникла проблема со сложностью. Вот почему я поднимаюсь с видом. Я правильно понял ваш сценарий и спасибо за этот хороший ответ и предложение. +1 за это. :) - person Choxx; 29.12.2015
comment
@choxx Если вы предоставите более подробную информацию, возможно, мы сможем посоветовать, как это сделать правильно. Должен быть способ сделать это, возможно, через вспомогательный компонент или событие, но не в представлении. В любом случае рад помочь. - person arogachev; 29.12.2015