Laravel 5如何获取路线动作名称?

php laravel laravel-5

49853 观看

11回复

2514 作者的声誉

我正在尝试获取当前的路线操作,但不确定如何执行该操作。在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();
    }
}
作者: Rob 的来源 发布者: 2014 年 11 月 10 日

回应 (11)


21

78110 作者的声誉

要获取动作名称,您需要使用:

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

并不是

echo Route::getActionName();
作者: Marcin Nabiałek 发布者: 10.11.2014 09:50

21

50227 作者的声誉

决定

在Laravel 5中,您应该使用Method或Constructor注入。这将做您想要的:

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Route;

class HomeController extends Controller
{
    public function getIndex(Route $route)
    {
        echo 'getIndex';
        echo $route->getActionName();
    }
}
作者: Laurence 发布者: 10.11.2014 10:45

3

193 作者的声誉

代替

use Illuminate\Routing\Route;

用这个

use Illuminate\Support\Facades\Route;

如果要获取路由的别名,可以使用:

Route::getCurrentRoute()->getName()
作者: leoalmar 发布者: 20.04.2015 09:13

1

1956 作者的声誉

对于Laravel 5.1使用:

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

此类中有许多有用的方法。只需检查代码以获取更多详细信息。

作者: Todor Todorov 发布者: 24.08.2015 08:44

3

77 作者的声誉

要在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);
    }
}

编辑:您将不会获得受此中间件保护的路由:(

作者: CagunA 发布者: 30.09.2015 08:39

4

29626 作者的声誉

要仅获取操作名称(不包含控制器名称):

list(, $action) = explode('@', Route::getCurrentRoute()->getActionName());
作者: Limon Monte 发布者: 10.11.2015 03:55

5

1142 作者的声誉

要仅获取方法名称,可以使用...

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

或外墙...

Route::getActionMethod()
作者: Ilario Engler 发布者: 10.05.2017 01:55

1

3174 作者的声誉

在Laravel 5.4中仅获取动作名称

explode('@', Route::getCurrentRoute()->getActionName())[1]

找不到一种更好的方法,可以在一行中在视图中使用...

作者: Gediminas 发布者: 19.06.2017 09:34

1

169 作者的声誉

您可以用来从请求本身获取控制器详细信息

$request->route()->getAction()
作者: Seadon Francis Pinto 发布者: 05.07.2017 07:45

2

232 作者的声誉

在Laravel 5.5中,如果您只想要方法/动作名称,例如显示,编辑,自定义方法等,请执行此操作

Route::getCurrentRoute()->getActionMethod() 

无需使用explode或list即可获取要调用的实际方法。感谢Laravel想到了这一点。

作者: greaterKing 发布者: 08.01.2018 04:52

0

186 作者的声誉

$request->route()->getAction()['prefix'] // return 'api'
作者: Franklin'j Gil'z 发布者: 03.09.2019 10:31
32x32