Laravel - 如何根据url参数使用不同的控制器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel - 如何根据url参数使用不同的控制器?相关的知识,希望对你有一定的参考价值。
我有一条看起来像这样的路线:
Route::get('/{camp}/session/{session}/athlete/{athlete}/category/{category}/type/{type}', 'AthleteController@chart');
此页面呈现一个允许运动员选择位置的视图(踢球者,投手者,接收者等)。 “位置”是网址的/type/{type}
部分。基于{type}
的值如果可能的话,我想使用适当的控制器。
例如,让我们说/type/2
是Kickoff。所以要显示此网址的启动形式:
/camp/123/session/456/athlete/5/category/1/type/2
会使用KickoffController@create
。然后KickoffController@store
保存数据。
/type/3
将用于踢球:
/camp/123/session/456/athlete/5/category/1/type/3
所以我会用PuntController@create
; PuntController@store
保存(依此类推)。
我想我可以创建一个StatController
并继续扩展基于类型的开关,但这似乎......不像拥有1:1 stat:controller一样干净。
我环顾了动态路由。这就是我需要的东西吗?
编辑
这是我的表单标签使用Laravel Collective
的样子:
{!! Form::open(array('action'=>'KickoffController@store','class'=>'charting-form')) !!}
以下是我根据建议的答案和其他一些SO帖子尝试的内容。 (请把笑声保持在最低限度):)
Route::post('/{camp}/session/{session}/athlete/{athlete}/category/{category}/type/{type}/store', function ($type) {
switch ($type) {
case 1:
$stat = 'Kickoff';
break;
default:
break;
}
$class = 'AppHttpControllers/' . $stat . '/Controller';
$action = 'method';
if (method_exists($class, $action . 'Action')) {
$controller = App::make($class);
return $controller->callAction($action, array());
}
});
答案
您可以通过调用动态控制器
$controller_name = "AppHttpControllers\$controller_name";
return controller_name->method();
以上是关于Laravel - 如何根据url参数使用不同的控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WordPress Woo-Commerce 插件根据 url 参数显示不同的产品?