Laravel 5 как получить название действия маршрута?
Я пытаюсь получить текущее действие маршрута, но я не уверен, как это сделать. В 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();
}
}
Ответы
Ответ 1
В 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();
}
}
Ответ 2
Чтобы получить имя действия, вам необходимо использовать:
echo Route::getCurrentRoute()->getActionName();
а не
echo Route::getActionName();
Ответ 3
Чтобы получить только имя действия (без имени контроллера):
list(, $action) = explode('@', Route::getCurrentRoute()->getActionName());
Ответ 4
Чтобы получить только имя метода, которое вы можете использовать...
$request->route()->getActionMethod()
или с фасадом...
Route::getActionMethod()
Ответ 5
Вместо
use Illuminate\Routing\Route;
Используйте этот
use Illuminate\Support\Facades\Route;
Если вы хотите получить псевдоним маршрута, вы можете использовать:
Route::getCurrentRoute()->getName()
Ответ 6
Чтобы получить название действия маршрута на промежуточном ПО, я делаю это:
<?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\[email protected]'
//Now you can do what you want whit the action name
return $next($request);
}
}
EDIT: вы не получите маршруты, которые защищены этим промежуточным программным обеспечением: (
Ответ 7
В Laravel 5.5, если вы просто хотите имя метода/действия, то есть show, edit, custom-method и т.д.... сделайте это
Route::getCurrentRoute()->getActionMethod()
Не нужно использовать explode или list, чтобы получить фактический метод для вызова. Спасибо Ларавелю, который подумал об этом.
Ответ 8
Для Laravel 5.1 используйте:
$route = new Illuminate\Routing\Route();
$route->getActionName(); // Returns App\Http\Controllers\[email protected]
$route->getAction(); // Array with full controller info
В этом классе есть много полезных методов. Просто проверьте код для получения более подробной информации.
Ответ 9
Чтобы получить только имя действия в Laravel 5.4
explode('@', Route::getCurrentRoute()->getActionName())[1]
Невозможно найти лучший способ, использовать в поле зрения, в одной строке...
Ответ 10
Вы можете использовать, чтобы получить информацию о контроллере из самого запроса
$request->route()->getAction()
Ответ 11
$request->route()->getAction()['prefix'] // return 'api'