我试图获取当前的路线动作,但我不确定该怎么做。在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();
}
}
答案 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();