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

在Laravel v4中,我可以使用…

Route::currentRouteName()

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

566024 次浏览

找到了一种方法来查找当前路由名称的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();

试试这个

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路由文档 . X

有一个选项可以使用request来获取路由

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

在一个控制器动作中,你可以这样做:

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'
]);

使用Laravel 5.1,您可以使用

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

你可以在模板中使用:

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

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

如果你需要url,而不是路的名字,你不需要使用/需要任何其他类:

url()->current();

Laravel 5.2可以使用

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

它会给你当前的路由名。

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

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

希望这能帮助到一些人。

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

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

或者通过helper方法:

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

输出的例子:

"home.index"

最短路径是Route facade \Route::current()->getName() < / p >

这也适用于laravel 5.4.*

现在在Laravel 5.3中,我看到可以做出类似的尝试:

$route = Route::current();


$name = Route::currentRouteName();


$action = Route::currentRouteAction();

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

在Helper文件中,

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

因此,如果你比较你的路由名在菜单上设置活动类,那么如果你使用

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

在larvel 5.3中,我用它来获取路由名

Request::path()

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

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()的性能问题

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

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

访问当前路由

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

\{\{ Route::currentRouteName() }}

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

由于某些原因,我不能使用这些解决方案。所以我刚刚在web.php中声明我的路由为$router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index']),在我的控制器中,我使用$routeName = $request->route()[1]['as'];获得了路由的名称,其中$request\Illuminate\Http\Request $request类型暗示参数,在UserControllerindex方法中

使用Lumen 5.6。希望它能帮助到一些人。

解决方案:

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

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

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

关于文档,请参见这个链接

您可以使用以下方法:

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

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

$route = Route::current();


$name = Route::currentRouteName();


$action = Route::currentRouteAction();

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

Ie - http://localhost/your_project_name/edit

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

(或)

$request->url();  // http://localhost/your_project_name/edit

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

request()->route()->uri

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

在blade文件中:\{\{url()->current()}}

有很多方法可以做到这一点。你可以输入:

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

获取路由名称。

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

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

对于id from url on view

$url_id = Request::segment(2);

你要做的第一件事就是在的顶部导入名称空间

use Illuminate\Support\Facades\Route;

laravel 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();
\Request::path()

我用这个来获取当前uri

使用幼虫助手和魔法方法

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

在laravel 7或8使用辅助功能

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

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

AppServiceProviderboot方法:

use Illuminate\Support\Facades\Request;
public function boot()
{
Request::macro('isCurrentRoute', function ($routeNames) {
$bool = false;
foreach (is_array($routeNames) ? $routeNames : explode(",",$routeNames) as $name) {
if(request()->routeIs($name)) {
$bool = true;
break;
}
}


return $bool;
});
}

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

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

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

request()->routeIs('home');
request()->routeIs('blogs.*'); //using wildcard

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

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


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

...


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

女巫真的帮助我重新使用相同的视图,而不重复的代码。

使用帮助:

app('request')->route()->getName()