Laravel - Как я могу использовать другой контроллер на основе параметров URL?

routing laravel-5.2

43 просмотра

1 ответ

У меня есть маршрут, который выглядит так:

Route::get('/{camp}/session/{session}/athlete/{athlete}/category/{category}/type/{type}', 'AthleteController@chart');

На этой странице отображается вид, позволяющий спортсмену выбрать позицию (Kicker, Punter, Receiver и т. Д.). «Позиция» является /type/{type}частью URL. Исходя из значения {type}Если возможно, я бы хотел использовать соответствующий контроллер.

Например, скажем, /type/2это Kickoff. Таким образом, чтобы показать стартовую форму этого URL:

/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());
    }
});
Автор: Damon Источник Размещён: 08.11.2019 11:30

Ответы (1)


0 плюса

Вы можете вызвать динамический контроллер по

$controller_name = "App\Http\Controllers\\$controller_name";
return controller_name->method();
Автор: msonowal Размещён: 20.08.2016 05:14
Вопросы из категории :
32x32