271

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

Route::currentRouteName()

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

4

32 回答 32

536

尝试这个

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();
于 2015-05-05T11:57:33.923 回答
38

使用 Laravel 5.1,您可以使用

\Request::route()->getName()
于 2015-10-08T07:40:17.043 回答
27

找到一种方法来查找适用于 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();
于 2015-05-05T07:40:47.133 回答
25

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

<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中测试过

希望这对某人有所帮助。

于 2016-05-11T08:35:30.117 回答
24

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

url()->current();
于 2016-03-17T14:04:38.427 回答
14

Laravel 5.2 你可以使用

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

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

于 2016-04-15T07:55:15.367 回答
11

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

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

或通过辅助方法:

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

输出示例:

"home.index"
于 2016-07-04T15:50:33.287 回答
6

访问当前路由

在 Blade 模板中获取当前路由名称

{{ Route::currentRouteName() }}

有关更多信息https://laravel.com/docs/5.5/routing#accessing-the-current-route

于 2018-09-13T12:29:42.570 回答
6

最短的方法是路线门面 \Route::current()->getName()

这也适用于 laravel 5.4.*

于 2016-07-18T08:54:04.480 回答
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'
]);
于 2015-08-30T23:28:34.057 回答
5

您可以在模板中使用:

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
于 2015-10-28T07:15:07.627 回答
5

您可以使用以下代码在刀片文件中获取路线名称

request()->route()->uri
于 2020-05-04T10:12:01.863 回答
4

访问当前路由(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

于 2018-08-25T12:55:37.920 回答
4

现在在 Laravel 中5.3,我看到您尝试过类似的方法:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

https://laravel.com/docs/5.3/routing#accessing-the-current-route

于 2016-10-03T02:40:31.910 回答
3
$request->route()->getName();
于 2019-06-06T05:40:06.950 回答
3

在 laravel 7 或 8 中使用辅助函数

Get Current Route Name
request()->route()->getName()

要检查路由是否当前更好,请使用宏为请求类创建自己的方法

在方法AppServiceProvider中:boot

use Illuminate\Http\Request;
public function boot()
    {
        Request::macro('isCurrentRoute', function ($routeNames) {
            return in_array(
                request()->route()->getName(),
                is_array($routeNames) ? $routeNames : explode(",", $routeNames)
            );
        });
    }

您可以在刀片或控制器中使用此方法

request()->isCurrentRoute('foo') // string route
request()->isCurrentRoute(['bar','foo']) //array routes
request()->isCurrentRoute('blogs,foo,bar') //string route seperated by comma

您可以使用内置的 laravel 路由方法

route()->is('home');
route()->is('blogs.*'); //using wildcard
于 2021-09-18T06:51:09.393 回答
3

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

于 2016-02-24T06:44:57.500 回答
2

您可能要做的第一件事是在class顶部导入命名空间

use Illuminate\Support\Facades\Route;

拉拉维尔 v8

$route = Route::current(); // Illuminate\Routing\Route
$name = Route::currentRouteName(); // RouteName
$action = Route::currentRouteAction(); // Action

Laravel v7,6 和 5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();
于 2021-04-17T23:51:47.170 回答
2

在我看来,最简单的解决方案是使用这个助手:

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

有关文档,请参阅此链接

于 2019-08-28T20:27:09.787 回答
1

您可以使用以下方法:

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

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

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();
于 2019-11-28T10:22:19.743 回答
1

在控制器中访问当前路由名称

即 - http://localhost/your_project_name/edit

$request->segment(1);  // edit

( 或者 )

$request->url();  // http://localhost/your_project_name/edit
于 2020-03-19T11:03:42.223 回答
1

解决方案 :

$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;
于 2019-01-25T14:38:55.403 回答
1

Looking at \Illuminate\Routing\Router.php you can use the method currentRouteNamed() by injecting a Router in your controller method. For example:

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

or using the Route facade:

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

You could also use the method is() to check if the route is named any of the given parameters, but beware this method uses preg_match() and I've experienced it to cause strange behaviour with dotted route names (like 'foo.bar.done'). There is also the matter of performance around preg_match() which is a big subject in the PHP community.

public function index(Request $request) {
    return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}
于 2017-10-24T08:08:03.940 回答
1

使用 laravel 助手和魔法方法

request()->route()->getName()
于 2021-09-08T12:56:28.407 回答
1

我已经用于在 larvel 5.3 中获取路线名称

Request::path()

于 2017-07-12T11:21:02.220 回答
0

由于某些原因,我无法使用这些解决方案中的任何一个。所以我只是在web.phpas$router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])和我的控制器中声明了我的路由,我得到了路由的名称,使用$routeName = $request->route()[1]['as'];$request是方法中的\Illuminate\Http\Request $request类型提示参数indexUserController

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

于 2018-09-18T08:37:24.810 回答
0

在 Helper 文件中,

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

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

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

于 2017-05-25T04:45:52.070 回答
0

这是我使用的,我不知道为什么没有人提到它,因为它对我来说非常好用。

Route::getCurrentRoute()->uri ; // this returns a string like '/home'


所以我在我的master.blade.php文件中使用它:

...

@if ( Route::getCurrentRoute()->uri =='/dashbord' )
   @include('navbar')
@endif
...

女巫真的帮助我在不重复代码的情况下重新使用相同的视图。
于 2022-02-01T01:06:55.923 回答
0

如果在直接视图中需要路由名称或 url id 对于直接视图上的路由名称,没有人有答案

$routeName = Request::route()->getName();

查看来自 url 的 id

$url_id = Request::segment(2);
于 2021-03-16T08:00:07.130 回答
0
\Request::path()

我用它来获取当前的uri

于 2021-08-12T14:24:20.540 回答
0

您可以使用这行代码:url()->current()

在刀片文件中:{{url()->current()}}

于 2020-11-07T00:02:21.597 回答
0

有很多方法可以做到这一点。您可以键入:

\Illuminate\Support\Facades\Request::route()->getName()

获取路线名称。

于 2021-02-25T09:09:47.760 回答