如何获取当前路线名称?

问题描述 投票:170回答:20

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

Route::currentRouteName()

我怎么能在Laravel 5中做到这一点?

php laravel laravel-5 laravel-5.5 laravel-routing
20个回答
350
投票

试试这个

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

要么

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

来自v5。+

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

Laravel 5.3

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

或者如果您需要动作名称

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

您可以在Laravel API中找到关于laravel Routes的所有信息:http://laravel.com/api/5.0/Illuminate/Routing/Router.html http://laravel.com/api/5.0/Illuminate/Routing.html

检索请求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 5.2和5.3

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3 route documentation

Laravel 5.2 route documentation

可以选择使用请求获取路由

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

4
投票

现在在Laravel 5.3我看到你可以尝试类似的方式:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

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


3
投票

在控制器操作中,您可以这样做:

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

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

getName()仅返回named routes的路由名称,否则返回null(但您仍然可以探索\Illuminate\Routing\Route对象以获取其他感兴趣的内容)。

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

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

3
投票

Request::path();更好,并记住Use Request;


3
投票

访问当前路线(v5.3以后)

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

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

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

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


1
投票

我已经习惯在laravel 5.3中获取路由名称

Request::path()


1
投票

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

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

或使用路线外观:

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
投票

访问当前路线

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

{{ Route::currentRouteName() }}

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


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

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类型参数

使用流明5.6。希望它能帮助别人。


32
投票

使用Laravel 5.1,您可以使用

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

0
投票

方案:

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

23
投票

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

命名空间

use Illuminate\Support\Facades\Route;

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

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

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

21
投票

如果您需要url而不是路由名称,则不需要使用/ require任何其他类:

url()->current();

18
投票

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

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

希望这能有所帮助。


11
投票

Laravel 5.2你可以使用

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

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


8
投票

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

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

或通过帮助方法:

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

输出示例:

"home.index"

6
投票

最短的路线是路线外观\Route::current()->getName()

这也适用于laravel 5.4。*


5
投票

您可以在模板中使用:

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
© www.soinside.com 2019 - 2024. All rights reserved.