【问题标题】:Redirect from one view to another view - Yii2从一个视图重定向到另一个视图 - Yii2
【发布时间】:2016-04-02 00:26:28
【问题描述】:

这是我在我网站的查看页面中的表格。

<?= $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部分所示,我想重定向到tasks/index这个url。 帮助我如何才能在这个视图中做到这一点。

【问题讨论】:

  • return Yii::$app-&gt;response-&gt;redirect(Url::to(['path', 'id' =&gt; id])); Redirect()
  • @InsaneSkull 成功了。但需要使用'yii\helpers\Url;'感谢您的回复.. :)

标签: php view yii2 active-form


【解决方案1】:

重定向在控制器或一些相关组件中完成,但不在视图中完成,因为在这种情况下渲染没有意义。

在控制器中,您可以使用更短的形式:

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

请注意,您不必使用 Url::to() 帮助器来构建 url,因为它已经在内部应用了。

你也可以使用:

Yii::$app-&gt;controller-&gt;redirect,如果控制器未知,则此方法调用Yii::$app-&gt;response-&gt;redirect,正如他的回答中提到的Insane Skull

看一下 GII 生成的控制器代码,看看保存/删除后如何使用重定向。

【讨论】:

  • 谢谢@arogachev。有关这方面的更多信息。为此 +1。
  • @arogachev 在控制器中完成重定向以遵循完整的 MVC 架构是 100% 正确的。但是,就我而言,我需要根据我的要求这样做。我尝试在控制器中这样做,但存在一些复杂性问题。这就是为什么我要上观。我正确理解了您的情况,并感谢您提供这个很好的答案和建议。为此+1。 :)
  • @choxx 如果您提供更多详细信息,也许我们可以建议如何正确执行。应该有办法做到这一点,可能是通过辅助组件或事件,但不在视图中。无论如何,很高兴能提供帮助。
【解决方案2】:

使用Url::to(),不要忘记在Header中添加yii\helpers\Url

例如,

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

Redirect()

【讨论】:

  • 并且在 URL 中添加 id 是可选的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多