Подтвердить что ты не робот

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();
    }
}
4b9b3361

Ответ 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'