Я пытаюсь получить текущее действие маршрута, но я не уверен, как это сделать. В Laravel 4 я использовал Route::currentRouteAction()
но теперь это немного другое.
Я пытаюсь выполнить Route::getActionName()
в моем контроллере, но он продолжает давать мне метод не найден.
<?php namespace App\Http\Controllers; use Route; class HomeController extends Controller { public function getIndex() { echo 'getIndex'; echo Route::getActionName(); } }
В Laravel 5 вы должны использовать метод или конструктор инъекции. Это сделает то, что вы хотите:
<?php namespace App\Http\Controllers; use Illuminate\Routing\Route; class HomeController extends Controller { public function getIndex(Route $route) { echo 'getIndex'; echo $route->getActionName(); } }
Чтобы получить имя действия, вам необходимо использовать:
echo Route::getCurrentRoute()->getActionName();
и не
echo Route::getActionName();
Чтобы получить название действия маршрута в Middleware, я делаю это:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Routing\Router; class HasAccess { protected $router; public function __construct(User $user, Router $router) { $this->router = $router; } public function handle($request, Closure $next) { $action_name = $this->router->getRoutes()->match($request)->getActionName(); //$action_name will have as value 'App\Http\Controllers\HomeController@showWelcome' //Now you can do what you want whit the action name return $next($request); } }
EDIT: вы не получите маршруты, защищенные этим промежуточным программным обеспечением 🙁
Вместо
use Illuminate\Routing\Route;
Использовать это
use Illuminate\Support\Facades\Route;
Если вы хотите получить псевдоним маршрута, вы можете использовать:
Route::getCurrentRoute()->getName()
Чтобы получить только имя действия (без имени контроллера):
list(, $action) = explode('@', Route::getCurrentRoute()->getActionName());
Чтобы получить только имя метода, вы можете использовать …
$request->route()->getActionMethod()
или с фасадом …
Route::getActionMethod()
Для Laravel 5.1 используйте:
$route = new Illuminate\Routing\Route(); $route->getActionName(); // Returns App\Http\Controllers\MyController@myAction $route->getAction(); // Array with full controller info
В этом классе есть много полезных методов. Просто проверьте код для получения более подробной информации.
Чтобы получить только имя действия в Laravel 5.4
explode('@', Route::getCurrentRoute()->getActionName())[1]
Невозможно найти лучший способ, использовать в поле зрения, в одной строке …
Вы можете использовать, чтобы получить информацию о контроллере из самого запроса
$request->route()->getAction()