如何获取当前路线名称?

Md *_*yan 198 php laravel laravel-routing laravel-5 laravel-6

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

Route::currentRouteName()
Run Code Online (Sandbox Code Playgroud)

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

Adn*_*nan 387

试试这个

Route::getCurrentRoute()->getPath();
Run Code Online (Sandbox Code Playgroud)

要么

\Request::route()->getName()
Run Code Online (Sandbox Code Playgroud)

来自v5.+

use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();
Run Code Online (Sandbox Code Playgroud)

Laravel 5.3

Route::currentRouteName(); //use Illuminate\Support\Facades\Route;
Run Code Online (Sandbox Code Playgroud)

或者如果您需要动作名称

Route::getCurrentRoute()->getActionName();
Run Code Online (Sandbox Code Playgroud)

您可以在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();
Run Code Online (Sandbox Code Playgroud)

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

if ($request->is('admin/*')) {
    //
}
Run Code Online (Sandbox Code Playgroud)

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

$url = $request->url();
Run Code Online (Sandbox Code Playgroud)

  • `Route :: currentRouteName();`完美:) (4认同)
  • 在视图中使用`request()`帮助函数特别有用。“ request()-> route()-> getName()”是最好的选择。 (3认同)
  • @Daniel Dewhurst:也许它适用于 v < 5.7,但在 v5.7 中你不能静态使用它,而是`request()->route()->getName()` 是要走的路。 (2认同)

lor*_*ger 36

使用Laravel 5.1,您可以使用

\Request::route()->getName()
Run Code Online (Sandbox Code Playgroud)

  • 当你把它作为``{{route(\ Request :: route() - > getName())}}```放在视图上时,这也有效.非常感谢! (2认同)

Md *_*yan 23

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

命名空间

use Illuminate\Support\Facades\Route;
Run Code Online (Sandbox Code Playgroud)

$currentPath= Route::getFacadeRoot()->current()->uri();
Run Code Online (Sandbox Code Playgroud)

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

use Illuminate\Support\Facades\Route;

Route::currentRouteName();
Run Code Online (Sandbox Code Playgroud)


Jig*_*sar 23

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

Get Current Route Name
Run Code Online (Sandbox Code Playgroud)
request()->route()->getName()
Run Code Online (Sandbox Code Playgroud)

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

在方法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;
        });
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

request()->routeIs('home');
request()->routeIs('blogs.*'); //using wildcard
Run Code Online (Sandbox Code Playgroud)


Fus*_*ion 22

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

url()->current();
Run Code Online (Sandbox Code Playgroud)

  • 我知道了.这仅适用于**5.2或更高版本**.但它相当不错. (3认同)

小智 19

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

<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>
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想选择单个菜单,您可以这样做:

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

也在Laravel 5.2中测试过

希望这能有所帮助.


小智 12

Laravel 5.2你可以使用

$request->route()->getName()
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上是不正确的.`name()`方法将添加或更改名称,而`getName()`方法将返回它. (7认同)

Jon*_*han 9

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

$request->route()->getName();
Run Code Online (Sandbox Code Playgroud)

或通过帮助方法:

request()->route()->getName();
Run Code Online (Sandbox Code Playgroud)

输出示例:

"home.index"
Run Code Online (Sandbox Code Playgroud)

  • 辅助方法是最好的.适用于laravel-5.6 (2认同)

Whi*_*rCZ 6

最短路是路线立面 \Route::current()->getName()

这也适用于laravel 5.4.*


Bog*_*van 5

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

public function someAction(Request $request)
{
    $routeName = $request->route()->getName();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


小智 5

您可以在模板中使用:

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


小智 5

访问当前路由

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

{{ Route::currentRouteName() }}
Run Code Online (Sandbox Code Playgroud)

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


Den*_*own 5

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

request()->route()->getName()
Run Code Online (Sandbox Code Playgroud)

有关文档,请参阅此链接


小智 5

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

request()->route()->uri
Run Code Online (Sandbox Code Playgroud)