В настоящее время я могу получить маршрут в контроллере, введя его в метод, в котором я хочу его использовать.
<?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
Не совсем уверен, что с этим делать. Не важно, если это маршрут или нет, но нужно как-то получить это имя действия.
Удалите свой конструктор / поместите его по умолчанию;
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();