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

问题描述 投票:221回答:24

在Laravel v4中, 我可以使用...

Route::currentRouteName()

我怎样才能在 Laravel v5Laravel v6?

php laravel laravel-5 laravel-routing laravel-6
24个回答
440
投票

试试这个

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

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

从5.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方法将返回 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来获取路由。

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

38
投票

使用Laravel 5.1, 你可以使用

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

24
投票

找到了一种方法来找到当前laravel的路由名称工作 v5 , v5.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();

23
投票

如果你需要 网址,不 途径名称如果您想在多条路线上选择菜单,您不需要使用任何其他类。

url()->current();

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

希望这个能帮助到大家.


13
投票

Laravel 5.2 你可以使用

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

它会给你当前的路由名称。


9
投票

在5.2中,你可以直接使用请求。

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

或通过助记方法使用。

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

输出示例。

"home.index"

6
投票

最短的方法是Route Facade\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"; ?>

4
投票

现在在Laravel中 5.3 我是看到可以做类似你试过的。

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

https:/laravel.comdocs5.3routing#accessing-the-current-route。


4
投票

访问当前路线

在刀片模板中获取当前路径名称

{{ Route::currentRouteName() }}

更多信息 https:/laravel.comdocs5.5routing#accessing-the-current-route。


3
投票

访问当前路由(v5.3以上)

您可以使用Route Facade上的current、currentRouteName和currentRouteAction方法来访问处理传入请求的路由的信息。

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

请参考Route Facade的底层类和Route实例的API文档,查看所有可访问的方法。

参考文献 : https:/laravel.comdocs5.2routing#accessing-the-current-route。


3
投票

Request::path(); 是比较好的,而且要记得 use Request;


2
投票
$request->route()->getName();

1
投票

我在larvel 5.3中使用了获取路径名的方法。

Request::path()


1
投票

在看 \Illuminate\Routing\Router.php 你可以使用 currentRouteNamed() 通过在你的控制器方法中注入一个Router。例如,在你的控制器方法中注入一个Router。

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

或使用Route Facade。

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

1
投票

在Controller中获取当前路由名

ie- http:/localhostproject_nameedit。

$request->seg(1); /编辑

(或)

$request->url();/。http:/localhostproject_nameedit)。


0
投票

在助手文件中。

您可以使用 Route::current()->uri() 来获取当前的URL。

因此,如果你把你的路径名与菜单上的活动类进行比较,那么你最好使用

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


0
投票

由于某些原因,我无法使用这些解决方案。所以我只是在 web.php 作为 $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index']) 而在我的控制器中,我用 $routeName = $request->route()[1]['as']; 其中 $request\Illuminate\Http\Request $request 键入参数 index 方式 UserController

使用Lumen 5.6。希望能帮到大家。


0
投票

解决方法:在刀片文件中,可以使用下面的代码来获取路由名称。

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

0
投票

您可以使用下面的代码来获取刀片文件中的路由名称。

request()->route()->uri
© www.soinside.com 2019 - 2024. All rights reserved.