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();
}
}
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();
}
}
Pour obtenir le nom de l'action, vous devez utiliser:
echo Route::getCurrentRoute()->getActionName();
et pas
echo Route::getActionName();
Pour obtenir uniquement le nom de la méthode, vous pouvez utiliser ...
$request->route()->getActionMethod()
ou avec une façade ...
Route::getActionMethod()
Pour obtenir le nom de l'action uniquement (sans le nom du contrôleur):
list(, $action) = explode('@', Route::getCurrentRoute()->getActionName());
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()
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 :(
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.
Vous pouvez utiliser pour obtenir les détails du contrôleur dans la demande elle-même.
$request->route()->getAction()
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.