Laravel: How to Get Current Route Name? (v5 ... v7)

PhpLaravelLaravel 5Laravel RoutingLaravel 6

Php Problem Overview


In Laravel v4 I was able to get the current route name using...

Route::currentRouteName()

How can I do it in Laravel v5 and Laravel v6?

Php Solutions


Solution 1 - Php

Try this

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

or

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

from v5.1

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

Laravel v5.2

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

Or if you need the action name

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

Laravel 5.2 route documentation

Retrieving The Request URI

The path method returns the request's URI. So, if the incoming request is targeted at http://example.com/foo/bar, the path method will return foo/bar:

$uri = $request->path();

The is method allows you to verify that the incoming request URI matches a given pattern. You may use the * character as a wildcard when utilizing this method:

if ($request->is('admin/*')) {
    //
}

To get the full URL, not just the path info, you may use the url method on the request instance:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3 route documentation

Laravel v6.x...7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Current as of Nov 11th 2019 - version 6.5 **

Laravel 6.x route documentation

There is an option to use request to get route

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

Solution 2 - Php

Using Laravel 5.1, you can use

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

Solution 3 - Php

Found a way to find the current route name works for laravel v5 , v5.1.28 and v5.2.10

Namespace

use Illuminate\Support\Facades\Route;

and

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

For Laravel laravel v5.3 you can just use:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

Solution 4 - Php

If you want to select menu on multiple routes you may do like this:

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

Or if you want to select just single menu you may simply do like this:

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

Also tested in Laravel 5.2

Hope this help someone.

Solution 5 - Php

If you need url, not route name, you do not need to use/require any other classes:

url()->current();

Solution 6 - Php

Laravel 5.2 You can use

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

It will give you current route name.

Solution 7 - Php

In 5.2, you can use the request directly with:

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

or via the helper method:

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

Output example:

"home.index"

Solution 8 - Php

Shortest way is Route facade \Route::current()->getName()

This also works in laravel 5.4.*

Solution 9 - Php

Accessing The Current Route

Get current route name in Blade templates

{{ Route::currentRouteName() }}

for more info https://laravel.com/docs/5.5/routing#accessing-the-current-route

Solution 10 - Php

In a controller action, you could just do:

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

$request here is resolved by Laravel's service container.

getName() returns the route name for named routes only, null otherwise (but you could still explore the \Illuminate\Routing\Route object for something else of interest).

In other words, you should have your route defined like this to have "nameOfMyRoute" returned:

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

Solution 11 - Php

You can use in template:

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

Solution 12 - Php

You can use bellow code to get route name in blade file

request()->route()->uri

Solution 13 - Php

Request::path(); is better, and remember to use Request;

Solution 14 - Php

Now in Laravel 5.3 I am seeing that can be made similarly you tried:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

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

Solution 15 - Php

Accessing The Current Route(v5.3 onwards)

You may use the current, currentRouteName, and currentRouteAction methods on the Route facade to access information about the route handling the incoming request:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Refer to the API documentation for both the underlying class of the Route facade and Route instance to review all accessible methods.

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

Solution 16 - Php

In laravel 7 or 8 use helper function

> Get Current Route Name

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

> To check if route is current better to create your own method for request class using macro

In AppServiceProvider In boot method :

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

> You can used this method in blade or controller

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

> You can use inbuilt laravel route method

route()->is('home');
route()->is('blogs.*'); //using wildcard

Solution 17 - Php

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

Solution 18 - Php

In my opinion the most easiest solution is using this helper:

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

For the docs, see this link

Solution 19 - Php

first thing you may do is import namespace on the top of class.

use Illuminate\Support\Facades\Route;

laravel v8

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

Laravel v7,6 and 5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Solution 20 - Php

I have used for getting route name in larvel 5.3

Request::path()

Solution 21 - Php

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

Solution 22 - Php

Solution :

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

Solution 23 - Php

You can use below method :

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

In Laravel version > 6.0, You can use below methods:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Solution 24 - Php

Accesing the Current Route Name in Controller

ie - http://localhost/your_project_name/edit

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

( or )

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

Solution 25 - Php

use laravel helper and magic methods

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

Solution 26 - Php

In a Helper file,

Your can use Route::current()->uri() to get current URL.

Hence, If you compare your route name to set active class on menu then it would be good if you use

Route::currentRouteName() to get the name of route and compare

Solution 27 - Php

for some reasons, I couldn't use any of these solutions. so I just declared my route in web.php as $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index']) and in my controller I got the name of the route using $routeName = $request->route()[1]['as']; which $request is \Illuminate\Http\Request $request typehinted parameter in index method of UserController

using Lumen 5.6. Hope it would help someone.

Solution 28 - Php

You can used this line of code : url()->current()

In blade file : {{url()->current()}}

Solution 29 - Php

There are lots of ways to do that. You can type:

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

To get route name.

Solution 30 - Php

no one have answer if route name or url id needed on view direct for the route name on view direct

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

for the id from url on view

$url_id = Request::segment(2);

Solution 31 - Php

\Request::path()

I use this to get current uri

Solution 32 - Php

Here is what i use, i don't know why no one mentioned it, because it worked perfectly fine for me.

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


So i use it in my master.blade.php file :

...

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


witch really helped me re use the same views without duplicating code.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMd Rashedul Hoque BhuiyanView Question on Stackoverflow
Solution 1 - PhpAdnanView Answer on Stackoverflow
Solution 2 - PhplorangerView Answer on Stackoverflow
Solution 3 - PhpMd Rashedul Hoque BhuiyanView Answer on Stackoverflow
Solution 4 - PhpWebistanView Answer on Stackoverflow
Solution 5 - PhpFusionView Answer on Stackoverflow
Solution 6 - PhpJalvin VohraView Answer on Stackoverflow
Solution 7 - PhpJonathanView Answer on Stackoverflow
Solution 8 - PhpWhipsterCZView Answer on Stackoverflow
Solution 9 - Phpyogesh chatrolaView Answer on Stackoverflow
Solution 10 - PhpBogdan GhervanView Answer on Stackoverflow
Solution 11 - PhpJS LeeView Answer on Stackoverflow
Solution 12 - Phpyagnik devaniView Answer on Stackoverflow
Solution 13 - PhpworldaskView Answer on Stackoverflow
Solution 14 - PhpitsazzadView Answer on Stackoverflow
Solution 15 - PhpAmitesh BhartiView Answer on Stackoverflow
Solution 16 - PhpJignesh JoisarView Answer on Stackoverflow
Solution 17 - PhppanqingqiangView Answer on Stackoverflow
Solution 18 - PhpDenBrownView Answer on Stackoverflow
Solution 19 - PhpMHAMMED TALHAOUYView Answer on Stackoverflow
Solution 20 - PhpDipak KolheView Answer on Stackoverflow
Solution 21 - PhpKenView Answer on Stackoverflow
Solution 22 - PhpKundan royView Answer on Stackoverflow
Solution 23 - Phpvaibhavmht225View Answer on Stackoverflow
Solution 24 - PhpHARIPRASATH PANNEERSELVAMView Answer on Stackoverflow
Solution 25 - Phpfatemeh sadeghiView Answer on Stackoverflow
Solution 26 - Phpankit patelView Answer on Stackoverflow
Solution 27 - PhpMajidJafariView Answer on Stackoverflow
Solution 28 - PhpAbd AbughazalehView Answer on Stackoverflow
Solution 29 - PhpJaiedView Answer on Stackoverflow
Solution 30 - PhpHassan TariqView Answer on Stackoverflow
Solution 31 - PhpDarkcoderView Answer on Stackoverflow
Solution 32 - PhpYasser CHENIKView Answer on Stackoverflow