我有一个类,其中有多个控制器,并且我想从另一个控制器调用另一个控制器,这个控制器位于不同的类中,当调用特定的控制器时,控制器将创建视图。
我的代码是
第一类 // 将从中调用控制器的类
@Controller
@RequestMapping(value="/register")
public class PatientController {
@RequestMapping(value="/demo1", method=RequestMethod.GET)
public String demo1(){
System.out.println("Demo1 method.....");
return "redirect:user/dashboard";
}
}
第二类 // 此类的控制器
@Controller
@RequestMapping("/user")
public class UserDasboardController {
@RequestMapping(value="/dashboard", method=RequestMethod.GET)
public String get(ModelMap model){
return "userdashboard";// returning view
}
}
调用第一个控制器后,将URL设为".../register/user/dashboard"
但它应该将网址设为"..../user/dashboard"
。
请建议我如何实现这一目标。 或者还有其他方法可以做同样的事情。
答案 0 :(得分:1)
当对同一控制器文件使用重定向时,我们可以将其用作
<?= GridView::widget([
'dataProvider' => $dataProvider,
//'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute' => 'type',
'value' => function ($model) {
return \app\models\BlockType::getConstantMessage($model->type);
},
],
[
'class' => 'kartik\grid\EditableColumn',
'header' => 'POSITION',
'attribute' => 'position',
],
[
'attribute' => 'access',
'value' => function ($model) {
return \app\components\Helper::ACCESS[$model->access];
},
],
'some_attribute',
[
'attribute' => 'other_relation',
'value' => 'model.relation.column'
],
[
'attribute' => 'Page',
'value' => function ($model) {
return $model->page->pageContent->name;
},
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
如果你想调用另一个类的控制器,你必须在它之前使用return "redirect: controllerName"
来调用它,这样就像
/
希望这有帮助。
答案 1 :(得分:0)
另一个解决方案是:MvcUriComponentsBuilder MvcUriComponentsBuilder docs
有一些很棒的方法,比如:fromMethod(),fromController()等等。 您可以自动接收到另一个方法/控制器的正确重定向路径。
示例 - 重定向到另一个控制器:
final UriComponentsBuilder uriComponents = MvcUriComponentsBuilder.fromController(WheredoYouWantToRedirectController.class);
final String path = uriComponents.build().getPath();
return REDIRECT_PREFIX+path;
以同样的方式,您可以使用重定向到方法。 MvcUriComponentsBuilder有助于减少与重定向相关的错误。
请查看文档以获取更多信息。