Промежуточное ПО динамического контроллера Laravel - PullRequest
0 голосов
/ 25 марта 2019

Привет, поэтому у меня есть несколько маршрутов, которые сохраняются в базе данных, каждый из которых имеет свой собственный контроллер со своим промежуточным программным обеспечением, и он маршрутизируется по этому маршруту;

Route::get('{any}', 'RoutingController@index')->where('any', '.*');

и я пытаюсь создать новый контроллер следующим образом;

$container = app();
$route = $container->make(\Illuminate\Routing\Route::class);
$controllerInstance = $container->make($controller);
return (new ControllerDispatcher($container))->dispatch($route, $controllerInstance, $action);

Итак, мой HomeController имеет здесь промежуточное ПО;

public function __construct()
{
    $this->middleware('guest');
}

Однако это не удостоится чести, так как я предполагаю, что это не новый запрос. Могу ли я почтить это промежуточное ПО?

1 Ответ

1 голос
/ 25 марта 2019

Диспетчер контроллеров - это не то, что вам нужно, потому что промежуточное ПО находится на уровне выше контроллера.Вам нужно пройти весь маршрут:

В вашем RoutingController

public function index() {
     //Override your route with what it really needs to do
     $route = Route::get(
         {any},
         '\App\Http\Controllers\HomeController@index'
    )->where('any', '.*');
    //Re-handle the request. It should hit your new route.
    app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle(request());
}

Идея состоит в том, что вы перезаписываете свой общий маршрут тем, что он должен сделать, основываясь на запросе.Это должно повлиять только на один запрос.

...