Laravel:如何获取当前路线名称?(v5…v7)


226

在Laravel v4中,我能够使用...获得当前的路线名称。

Route::currentRouteName()

我如何在Laravel v5Laravel v6中做到这一点


我应该使用哪个名称空间来查找路由名称?我使用过Illuminate \ Support \ Facades \ Route,但结果为null。
拉谢杜尔·霍克·布希恩

那是正确的课程。您的路线可能未分配名称。请注意,路由名称和URI不相同。
lukasgeiter 2015年


1
你为什么需要它?
Yevgeniy Afanasyev '18

Answers:


439

试试这个

Route::getCurrentRoute()->getPath();

要么

\Request::route()->getName()

从v5.1起

use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();

Laravel v5.2

Route::currentRouteName(); //use Illuminate\Support\Facades\Route;

或者如果您需要动作名称

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

Laravel 5.2路线文档

检索请求URI

path方法返回请求的URI。因此,如果传入请求的目标是http://example.com/foo/bar,则path方法将返回foo/bar

$uri = $request->path();

is方法使您可以验证传入的请求URI是否与给定的模式匹配。*使用此方法时,可以将字符用作通配符:

if ($request->is('admin/*')) {
    //
}

要获取完整的URL,而不仅仅是路径信息,可以在请求实例上使用url方法:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3路线文档

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

**当前为2019年11月11日-6.5版**

Laravel 6.x路线文档

有一个使用请求获取路线的选项

$request->route()->getName();

您是否有一个想法,例如,如果只想在视图api路由中打印,该如何过滤呢?api/...
utdev

6
Route::currentRouteName();完美:)
EM-Creations

$request::route()->getName()如果您已经在使用$ request,或者可以使用global helper request()::route()->getName()
Daniel Dewhurst

@Daniel Dewhurst:也许它可以在v <5.7上运行,但是对于v5.7,您不能静态使用它,而是request()->route()->getName()可以使用的方式。
1stthomas

5
request()在视图中使用帮助器功能特别有用。 request()->route()->getName()是最好的选择。
塞缪尔Shifterovich

38

使用Laravel 5.1,您可以使用

\Request::route()->getName()

2
当您将其放在视图上时,这也适用{{ route(\Request::route()->getName()) }}。非常感谢!
bonbon.langes

24

找到了一种方法来查找适用于laravel v5v5.1.28v5.2.10的当前路由名称

命名空间

use Illuminate\Support\Facades\Route;

$currentPath= Route::getFacadeRoot()->current()->uri();

对于Laravel laravel v5.3,您可以使用:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@Jonathan我相信最好使用完整的名称空间以避免任何潜在的冲突。
阿米尔·阿斯拉夫

23

如果需要url而不是route name,则不需要使用/不需要任何其他类:

url()->current();

这将返回错误:“在非对象上调用成员函数current()”。url()返回一个字符串,而不是一个对象,所以我不认为这可以工作。也许您在考虑其他方法或对象,而不是url()?
thelogix

1
不,我每天都用这个。检查官方文档
Fusion

3
我懂了。这仅适用于5.2或更高版本。但是它很好。
thelogix '16

23

如果要在多条路线上选择菜单,可以这样做:

<li class="{{ (Request::is('products/*') || Request::is('products') || Request::is('product/*') ? 'active' : '') }}"><a href="{{url('products')}}"><i class="fa fa-code-fork"></i>&nbsp; Products</a></li>

或者,如果您只想选择一个菜单,则可以这样操作:

<li class="{{ (Request::is('/users') ? 'active' : '') }}"><a href="{{url('/')}}"><i class="fa fa-envelope"></i>&nbsp; Users</a></li>

Laravel 5.2中也进行了测试

希望这对某人有帮助。


在Laravel 5.3中也进行了测试
Renato Liibke '19

在Laravel 7.5.2中也进行了测试
aspirinemaga

在Laravel 5.7中进行了测试
塔里古尔伊斯兰教,

13

Laravel 5.2您可以使用

$request->route()->getName()

它将为您提供当前的路线名称。


7
这实际上是不正确的。该name()方法将添加或更改名称,而该getName()方法将返回该名称。
Aron Rotteveel

9

在5.2中,您可以将请求直接用于:

$request->route()->getName();

或通过辅助方法:

request()->route()->getName();

输出示例:

"home.index"

2
助手方法是最好的。与laravel-5.6一起使用
Yevgeniy Afanasyev

6

最快捷的方法是路线立面 \Route::current()->getName()

这也适用于laravel 5.4。*


5

在控制器操作中,您可以执行以下操作:

public function someAction(Request $request)
{
    $routeName = $request->route()->getName();
}

$request 这是由Laravel的服务容器解决的。

getName()否则,仅返回命名路由的路由名称null(但是您仍然可以探索\Illuminate\Routing\Route对象以寻找其他感兴趣的东西)。

换句话说,您应该这样定义路由,以返回“ nameOfMyRoute”:

Route::get('my/some-action', [
    'as' => 'nameOfMyRoute',
    'uses' => 'MyController@someAction'
]);

5

您可以在模板中使用:

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>



3

访问当前路由(v5.3及更高版本)

您可以在Route外观上使用current,currentRouteName和currentRouteAction方法访问有关处理传入请求的路由的信息:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

有关Route门面和Route实例的基础类,请参阅API文档,以查看所有可访问的方法。

参考:https : //laravel.com/docs/5.2/routing#accessing-the-current-route


3

Request::path(); 更好,请记住 use Request;




1

通过查看,\Illuminate\Routing\Router.php您可以currentRouteNamed()通过在控制器方法中插入路由器来使用该方法。例如:

use Illuminate\Routing\Router;
public function index(Request $request, Router $router) {
   return view($router->currentRouteNamed('foo') ? 'view1' : 'view2');
}

或使用Route门面:

public function index(Request $request) {
   return view(\Route::currentRouteNamed('foo') ? 'view1' : 'view2');
}

您也可以使用该方法is()来检查该路由是否被命名为任何给定参数,但是请注意,该方法会使用该方法,preg_match()并且我已经体验到它会引起带有虚线路由名(例如'foo.bar.done')的奇怪行为。preg_match() 在PHP社区中,性能也是一个大问题。

public function index(Request $request) {
    return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}

1

我认为最简单的解决方案是使用此帮助程序:

request()->route()->getName()

对于文档,请参见此链接


1

您可以使用以下方法:

Route::getCurrentRoute()->getPath();

在Laravel版本> 6.0中,可以使用以下方法:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

在帮助程序文件中,

您可以Route::current()->uri()用来获取当前网址。

因此,如果您比较路线名称以在菜单上设置活动类别,那么如果您使用

Route::currentRouteName() 获取路线名称并进行比较


0

由于某些原因,我无法使用任何这些解决方案。所以我刚才宣布我的路线web.php$router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index']),在我的控制我使用路由的名称$routeName = $request->route()[1]['as'];$request\Illuminate\Http\Request $requesttypehinted参数index的方法UserController

使用流明5.6。希望它会帮助某人。


0

解决方案:

$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.