Laravel - 如何根据url参数使用不同的控制器?

时间:2016-08-20 15:30:00

标签: routing laravel-5.2

我有一条看起来像这样的路线:

/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());
    }
});

1 个答案:

答案 0 :(得分:0)

您可以通过

调用动态控制器
$controller_name = "App\Http\Controllers\\$controller_name";
return controller_name->method();