我有一条看起来像这样的路线:
/type/{type}
此页面呈现一个允许运动员选择位置的视图(踢球者,投手者,接收者等)。 “位置”是网址的{type}
部分。根据{{1}}的值,如果可能的话,我想使用适当的控制器。
例如,假设/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 = 'App\Http\Controllers\/' . $stat . '\/Controller';
$action = 'method';
if (method_exists($class, $action . 'Action')) {
$controller = App::make($class);
return $controller->callAction($action, array());
}
});
答案 0 :(得分:0)
您可以通过
调用动态控制器$controller_name = "App\Http\Controllers\\$controller_name";
return controller_name->method();