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 ?


¿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


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();

¿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()

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();

@ 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();

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.


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.


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"

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


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

5

Puedes usar en la plantilla:

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



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




1

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

Request::path()


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

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


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();


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


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.


0

Solución:

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

0

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

request()->route()->uri
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.