Laravel: ¿Cómo obtener el nombre de la ruta actual? (v5 ... v7)

226

En Laravel v4 pude obtener el nombre de la ruta actual usando ...

Route::currentRouteName()

¿Cómo puedo hacerlo en Laravel v5 y Laravel v6 ?

Md Rashedul Hoque Bhuiyan
fuente
¿Qué espacio de nombre debo usar para encontrar el nombre de la ruta? He usado Illuminate \ Support \ Facades \ Route pero el resultado es nulo.
Md Rashedul Hoque Bhuiyan
Esa es la clase correcta. Su ruta probablemente no tiene nombre asignado. Tenga en cuenta que el nombre de la ruta y el URI no son los mismos.
lukasgeiter
Aquí está la respuesta correcta stackoverflow.com/questions/27397487/…
Kamil Kiełczewski
1
Por que lo necesitarias?
Yevgeniy Afanasyev

Respuestas:

440

Prueba esto

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

o

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

de v5.1

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

Laravel v5.2

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

O si necesitas el nombre de la acción

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

Laravel 5.2 documentación de ruta

Recuperando el URI de solicitud

El método de ruta devuelve el URI de la solicitud. Entonces, si la solicitud entrante está dirigida a http://example.com/foo/bar, el método de ruta devolverá foo/bar:

$uri = $request->path();

El ismétodo le permite verificar que el URI de la solicitud entrante coincida con un patrón determinado. Puede usar el *carácter como comodín cuando utilice este método:

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

Para obtener la URL completa, no solo la información de la ruta, puede usar el método url en la instancia de solicitud:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3 documentación de ruta

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Actual a partir del 11 de noviembre de 2019 - versión 6.5 **

Documentación de ruta de Laravel 6.x

Hay una opción para usar la solicitud para obtener la ruta

$request->route()->getName();
Adnan
fuente
¿Tiene una idea de cómo filtrar esto, por ejemplo, si uno solo quiere imprimir en la vista de rutas de APIapi/...
Utdev
66
Route::currentRouteName();perfecto :)
EM-Creations
$request::route()->getName()si ya está usando la solicitud $, o puede usar el ayudante global request()::route()->getName().
Daniel Dewhurst
@Daniel Dewhurst: Tal vez funcione en v <5.7, pero con v5.7 no debe usarlo estáticamente, en cambio, request()->route()->getName()es el camino a seguir.
1stthomas
55
El uso de la request()función auxiliar es particularmente útil en las vistas. request()->route()->getName()Es la mejor opción.
Samuel Shifterovich
38

Usando Laravel 5.1, puedes usar

\Request::route()->getName()
prestamista
fuente
2
esto también funciona cuando lo pones en la vista como {{ route(\Request::route()->getName()) }}. ¡Muchas gracias!
bonbon.langes
24

Encontré una manera de encontrar el nombre de ruta actual que funciona para laravel v5 , v5.1.28 y v5.2.10

Espacio de nombres

use Illuminate\Support\Facades\Route;

y

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

Para Laravel laravel v5.3 puedes usar:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();
Md Rashedul Hoque Bhuiyan
fuente
@ Jonathan Creo que siempre es mejor usar el espacio de nombres completo para evitar cualquier conflicto potencial.
Amir Asyraf
23

Si necesita una URL , no el nombre de la ruta , no necesita usar / requerir ninguna otra clase:

url()->current();
Fusión
fuente
Esto devuelve un error: "Llamar a una función miembro current () en un no objeto". url () devuelve una cadena, no un objeto, por lo que no creo que esto haya funcionado. ¿Quizás estaba pensando en algún otro método u objeto, en lugar de url ()?
thelogix
1
No, yo uso esto a diario. Consultar documentos oficiales
Fusion
3
Veo. Esto solo funciona en la versión 5.2 o superior . Pero es bastante agradable.
thelogix
23

Si desea seleccionar el menú en varias rutas, puede hacer lo siguiente:

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

O si desea seleccionar un solo menú, simplemente puede hacer lo siguiente:

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

También probado en Laravel 5.2

Espero que esto ayude a alguien.

Webistan
fuente
también probado en Laravel 5.3
Renato Liibke
también probado en Laravel 7.5.2
aspirinemaga
probado en Laravel 5.7
Tariqul Islam
13

Laravel 5.2 Puedes usar

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

Te dará el nombre de la ruta actual.

Jalvin Vohra
fuente
77
Esto es realmente incorrecto. el name()método agregará o cambiará el nombre, mientras que el getName()método lo devuelve.
Aron Rotteveel
9

En 5.2, puede usar la solicitud directamente con:

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

o mediante el método auxiliar:

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

Ejemplo de salida:

"home.index"
Jonathan
fuente
2
El método auxiliar es el mejor. Funciona con laravel-5.6
Yevgeniy Afanasyev
6

El camino más corto es la fachada de la ruta \Route::current()->getName()

Esto también funciona en laravel 5.4. *

WhipsterCZ
fuente
5

En una acción de controlador, podría hacer lo siguiente:

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

$request aquí lo resuelve el contenedor de servicio de Laravel.

getName()devuelve el nombre de ruta solo para rutas con nombre , de lo nullcontrario (pero aún podría explorar el \Illuminate\Routing\Routeobjeto en busca de otra cosa de interés).

En otras palabras, debe tener su ruta definida de esta manera para que se devuelva "nameOfMyRoute":

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

Puedes usar en la plantilla:

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

Acceso a la ruta actual (v5.3 en adelante)

Puede usar los métodos current, currentRouteName y currentRouteAction en la fachada de la ruta para acceder a información sobre la ruta que maneja la solicitud entrante:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Consulte la documentación de la API tanto para la clase subyacente de la fachada de la ruta como para la instancia de la ruta para revisar todos los métodos accesibles.

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

Amitesh
fuente
3

Request::path(); es mejor, y recuerda use Request;

Worldask
fuente
2
$request->route()->getName();
panqingqiang
fuente
1

Lo he usado para obtener el nombre de la ruta en larvel 5.3

Request::path()

Dipak Kolhe
fuente
1

Al mirar \Illuminate\Routing\Router.php, puede usar el método currentRouteNamed()inyectando un enrutador en el método de su controlador. Por ejemplo:

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

o usando la fachada de la ruta:

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

También podría usar el método is()para verificar si la ruta tiene alguno de los parámetros dados, pero tenga cuidado con este método preg_match()y he experimentado que causa un comportamiento extraño con nombres de ruta punteados (como 'foo.bar.done'). También está la cuestión del rendimiento, preg_match() que es un tema importante en la comunidad PHP.

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

En mi opinión, la solución más fácil es usar este ayudante:

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

Para los documentos, vea este enlace

DenBrown
fuente
1

Puede usar el siguiente método:

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

En la versión Laravel> 6.0, puede usar los siguientes métodos:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();
vaibhavmht225
fuente
0

En un archivo auxiliar,

Puede usar Route::current()->uri()para obtener la URL actual.

Por lo tanto, si compara el nombre de su ruta para establecer la clase activa en el menú, sería bueno si usa

Route::currentRouteName() para obtener el nombre de la ruta y comparar

ankit patel
fuente
0

Por alguna razón, no pude usar ninguna de estas soluciones. por lo que acaba de declarar mi ruta de web.phpcomo $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])y en mi controlador me dieron el nombre de la ruta mediante $routeName = $request->route()[1]['as'];la cual $requestse \Illuminate\Http\Request $requesttypehinted parámetro en indexel método deUserController

utilizando Lumen 5.6. Espero que ayude a alguien.

MajidJafari
fuente
0

Solución:

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

Puede usar el siguiente código para obtener el nombre de la ruta en el archivo Blade

request()->route()->uri
yagnik devani
fuente