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

时间:2014-11-10 09:16:27

标签: php laravel 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();
    }
}

13 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:20)

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

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

而不是

echo Route::getActionName();

答案 2 :(得分:4)

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

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

答案 3 :(得分:4)

要获取您可以使用的方法名称...

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

或有立面......

Route::getActionMethod()

答案 4 :(得分:3)

相反

use Illuminate\Routing\Route;

使用此

use Illuminate\Support\Facades\Route;

如果您想获得路线的别名,可以使用:

Route::getCurrentRoute()->getName()

答案 5 :(得分:3)

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

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

答案 6 :(得分:2)

在Laravel 5.5中如果您只想要方法/动作名称,例如show,edit,custom-method等......请执行此操作

Route::getCurrentRoute()->getActionMethod() 

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

答案 7 :(得分:1)

对于Laravel 5.1使用:

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

这门课有很多有用的方法。只需查看代码即可获得更多详细信息。

答案 8 :(得分:1)

仅在Laravel 5.4中获取操作名称

function add(divName) { var newdiv = document.createElement('tr'); newdiv.innerHTML = '<td align='left'><input name='proion_paragwgi' type='text'/><br/></td>'; document.getElementById(divName).appendChild(newdiv); }

无法在一行中找到更好的方式,在视野中使用......

答案 9 :(得分:1)

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

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

答案 10 :(得分:0)

$request->route()->getAction()['prefix'] // return 'api'

答案 11 :(得分:0)

这对我来说非常好。

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

答案 12 :(得分:0)

我使用了它,并且它在视图中起作用。

一些选项。

将变量从控制器传递到视图。 设置全局视图变量 使用View Composer。 您需要根据使用情况选择其中一种。

Route::getCurrentRoute()->getAction();
Route::currentRouteAction();
Route::currentRouteName();