web-dev-qa-db-ja.com

あるビューから別のビューへのリダイレクト-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>

上記のelse部分で示したように、このURLをtasks/indexにリダイレクトします。 Viewでのみ、どうすればよいですか。

10
Choxx

Url::to()を使用し、yii\helpers\Urlをヘッダーに追加することを忘れないでください。

例えば、

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

リダイレクト()

11
Insane Skull

この場合はレンダリングが意味をなさないため、リダイレクトはコントローラーまたは一部の関連コンポーネントで行われますが、ビューでは行われません。

コントローラでは、より短い形式を使用できます:

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

Url::to()ヘルパーは既に内部で適用されているため、URLを作成するために使用する必要はありません。

次のものも使用できます。

Yii::$app->controller->redirect、コントローラが不明な場合、このメソッドはYii::$app->response->redirectInsane Skullとして呼び出しに答えます。

保存/削除後にリダイレクトがどのように使用されるかを確認するには、GIIによって生成されたコントローラーコードを見てください。

6
arogachev