2015-12-28 41 views
9

To jest mój formularz na stronie widoku mojej witryny.Przekierowanie z jednego widoku do innego - 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> 

Jak przedstawiono powyżej w części innego, chcę przekierować do tasks/index tego adresu URL. Pomóż mi, jak to zrobić w tym Wyświetl tylko.

+1

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

+0

@InsaneSkull To działało. Ale musi używać "yii \ helpers \ Url;" Dzięki za odpowiedź .. :) – Choxx

Odpowiedz

9

Użyj Url::to() i nie zapomnij dodać yii\helpers\Url w nagłówku.

na przykład

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

Redirect()

+0

Dodanie id do adresu URL jest opcjonalne. – Choxx

+0

masz rację. @choxx –

6

przekierowania są wykonywane w sterownikach lub kilku powiązanych elementów, ale nie w widokach, ponieważ renderowania nie ma sensu w tym przypadku.

W sterowniku, można użyć krótszej formy:

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

pamiętać, że nie trzeba używać Url::to() pomocnika do budowania URL, ponieważ jest on już stosowany wewnętrznie.

Można również użyć:

Yii::$app->controller->redirect, jeśli kontroler nie jest znana, wywołuje ta metoda Yii::$app->response->redirect jak Insane Czaszka wspomniano w swojej odpowiedzi.

Zobacz kod kontrolera generowany przez GII, aby zobaczyć, w jaki sposób przekierowanie jest używane po zapisaniu/usunięciu.

+1

Dzięki @arogachev. Więcej informacji na ten temat. +1 za to. –

+0

@arogachev To w 100% słuszne, że przekierowania są wykonywane w kontrolerach, aby podążać pełną architekturą MVC. Ale w moim przypadku musiałem to zrobić w związku z moim wymaganiem. Próbowałem to zrobić w kontrolerze, ale wystąpił problem złożoności. Właśnie dlatego podchodzę do widoku. Dobrze zrozumiałem Twój scenariusz i dziękuję za tę miłą odpowiedź i sugestię. +1 za to. :) – Choxx

+0

@choxx Jeśli podasz więcej szczegółów, może poradzimy, jak to zrobić właściwie. Powinien istnieć sposób, aby to zrobić, może poprzez komponent pomocniczy lub zdarzenie, ale nie w widoku. Chętnie ci pomogę. – arogachev