web-dev-qa-db-fra.com

Laravel 5 comment obtenir le nom d'action de la route?

J'essaie d'obtenir l'action de la route actuelle, mais je ne sais pas comment s'y prendre. Dans Laravel 4, j’utilisais Route::currentRouteAction() mais c’est maintenant un peu différent.

J'essaie de faire Route::getActionName() dans mon contrôleur mais il continue à me donner la méthode non trouvée.

<?php namespace App\Http\Controllers;

use Route;

class HomeController extends Controller
{
    public function getIndex()
    {
        echo 'getIndex';
        echo Route::getActionName();
    }
}
16
Rob

Dans Laravel 5, vous devriez utiliser une injection de méthode ou de constructeur. Cela fera ce que vous voulez:

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Route;

class HomeController extends Controller
{
    public function getIndex(Route $route)
    {
        echo 'getIndex';
        echo $route->getActionName();
    }
}
21
Laurence

Pour obtenir le nom de l'action, vous devez utiliser:

echo Route::getCurrentRoute()->getActionName();

et pas

echo Route::getActionName();
20
Marcin Nabiałek

Pour obtenir uniquement le nom de la méthode, vous pouvez utiliser ...

$request->route()->getActionMethod()

ou avec une façade ...

Route::getActionMethod()
4
Ilario Engler

Pour obtenir le nom de l'action uniquement (sans le nom du contrôleur):

list(, $action) = explode('@', Route::getCurrentRoute()->getActionName());
4
Limon Monte

Au lieu

use Illuminate\Routing\Route;

Utilisez ceci

use Illuminate\Support\Facades\Route;

Si vous voulez obtenir le pseudonyme de la route, vous pouvez utiliser:

Route::getCurrentRoute()->getName()
3
leoalmar

Pour obtenir le nom d'action de la route sur le middleware, je le fais:

<?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: Vous n'obtiendrez pas les routes protégées par ce middleware :(

3
CagunA

Dans Laravel 5.5, si vous voulez juste que le nom de la méthode/action soit show, edit, custom-method etc ... faites ceci

Route::getCurrentRoute()->getActionMethod() 

Il n'est pas nécessaire d'utiliser exploser ou list pour obtenir le nom de la méthode. Merci à Laravel qui a pensé à cela.

2
greaterKing

Vous pouvez utiliser pour obtenir les détails du contrôleur dans la demande elle-même.

$request->route()->getAction()
1

Pour Laravel 5.1, utilisez: 

$route = new Illuminate\Routing\Route();
$route->getActionName(); // Returns App\Http\Controllers\MyController@myAction
$route->getAction(); // Array with full controller info

Il y a beaucoup de méthodes utiles dans cette classe. Il suffit de vérifier le code pour plus de détails.

1
TodStoychev