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 参数显示不同的产品?

我们如何使用具有多个参数的laravel URL?

如何将 JSON 返回数据作为参数传递给 URL 路由(laravel)

如何防止 Laravel API 处理查询字符串上的参数?

Laravel:如何隐藏 url 参数?

在 Laravel 中如何在查询中不带参数的 groupBy Url