'Laravel: How to Get Current Route Name? (v5 ... v7)
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?
Solution 1:[1]
Using Laravel 5.1, you can use
\Request::route()->getName()
Solution 2:[2]
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 3:[3]
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> 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> Users</a></li>
Also tested in Laravel 5.2
Hope this help someone.
Solution 4:[4]
If you need url, not route name, you do not need to use/require any other classes:
url()->current();
Solution 5:[5]
Laravel 5.2 You can use
$request->route()->getName()
It will give you current route name.
Solution 6:[6]
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 7:[7]
Shortest way is Route facade
\Route::current()->getName()
This also works in laravel 5.4.*
Solution 8:[8]
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 9:[9]
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 10:[10]
You can use in template:
<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
Solution 11:[11]
You can use bellow code to get route name in blade file
request()->route()->uri
Solution 12:[12]
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 13:[13]
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 14:[14]
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 15:[15]
Request::path(); is better, and remember to use Request;
Solution 16:[16]
$request->route()->getName();
Solution 17:[17]
In my opinion the most easiest solution is using this helper:
request()->route()->getName()
For the docs, see this link
Solution 18:[18]
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 19:[19]
I have used for getting route name in larvel 5.3
Request::path()
Solution 20:[20]
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 21:[21]
Solution :
$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;
Solution 22:[22]
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 23:[23]
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 24:[24]
use laravel helper and magic methods
request()->route()->getName()
Solution 25:[25]
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 26:[26]
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 27:[27]
You can used this line of code : url()->current()
In blade file : {{url()->current()}}
Solution 28:[28]
There are lots of ways to do that. You can type:
\Illuminate\Support\Facades\Request::route()->getName()
To get route name.
Solution 29:[29]
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);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
