Как получить маршрут в промежуточном ПО в Ларавеле

В настоящее время я могу получить маршрут в контроллере, введя его в метод, в котором я хочу его использовать.

<?php namespace App\Http\Controllers; use Illuminate\Routing\Route; class HomeController extends Controller { public function getIndex(Route $route) { echo $route->getActionName(); } } 

Однако я пытаюсь выполнить что-то подобное в промежуточном программном обеспечении, но не могу добиться этого.

 <?php namespace App\Http\Middleware; use Closure; use Illuminate\Routing\Route; use Illuminate\Contracts\Routing\Middleware; class SetView implements Middleware { protected $route; public function __construct(Route $route) { $this->route = $route; } public function handle($request, Closure $next) { echo $this->route->getActionName(); return $next($request); } } 

Получение ошибки.

 Unresolvable dependency resolving [Parameter #0 [ <required> $methods ]] in class Illuminate\Routing\Route 

Не совсем уверен, что с этим делать. Не важно, если это маршрут или нет, но нужно как-то получить это имя действия.

Related of "Как получить маршрут в промежуточном ПО в Ларавеле"

Удалите свой конструктор / поместите его по умолчанию;

 public function __construct(){} 

Попробуйте получить доступ к маршруту с помощью метода дескриптора;

  $request->route(); 

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

  $request->route()->getActionName(); 

Если возврат маршрута нулевым, убедитесь, что вы зарегистрировали промежуточное программное обеспечение в приложении / Http / Kernel.php, например;

 protected $middleware = [ ... 'Path\To\Middleware', ]; 

Вышеупомянутое относится к глобальному промежуточному программному обеспечению

Для фильтрации по маршруту укажите 'Path\To\Middleware', в массиве промежуточного программного обеспечения в RouteServiceProvider.php в папке « App\Providers ».

Вы также можете получить доступ к объекту маршрута с помощью app()->router->getCurrentRoute() .

Редактировать:

Вы могли бы попробовать следующее:

 $route = Route::getRoutes()->match($request); $route->getActionName(); 

Получите маршрут от RouteCollection . Обязательно инкапсулируйте это в try catch, поскольку это вызовет NotFoundHttpException .

Для Laravel 5.1.x

В вашем глобальном промежуточном программном обеспечении

 use Illuminate\Support\Facades\Route; $route = Route::getRoutes()->match($request); $currentroute = $route->getName();