2015-12-28 4 views
9

Это моя форма на странице просмотра моего веб-сайта.Перенаправление с одного вида на другой вид - 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. Помогите мне, как я могу это сделать в этом Просмотреть только.

+1

'return Yii :: $ app-> response-> redirect (Url :: to (['path', 'id' => id]));' [Redirect()] (http: // www. yiiframework.com/doc-2.0/yii-web-response.html#redirect%28%29-detail) –

+0

@InsaneSkull Это сработало. Но нужно использовать «yii \ helpers \ Url;» Спасибо за ответ .. :) – Choxx

ответ

9

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

Для примера,

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

Redirect()

+0

И добавление идентификатора к URL-адресу является необязательным. – Choxx

+0

Вы правы. @choxx –

6

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

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

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

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

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

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

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

+1

Спасибо @arogachev. Для получения дополнительной информации об этом. +1 для этого. –

+0

@arogachev Это 100% правильно, что перенаправления выполняются в контроллерах, чтобы следовать полной архитектуре MVC. Но, в моем случае, мне нужно было сделать это в соответствии с моим требованием. Я попытался сделать это в контроллере, но проблема была сложной. Вот почему я поднимаюсь с точки зрения. Я правильно понял ваш сценарий и благодарю за этот хороший ответ и предложение. +1 для этого. :) – Choxx

+0

@choxx Если вы предоставите более подробную информацию, возможно, мы сможем советовать, как это сделать должным образом. Должен быть способ сделать это, возможно, через вспомогательный компонент или событие, но не в поле зрения. Рад помочь в любом случае. – arogachev