Laravel dice “Ruta no definida”

6 minutos de lectura

avatar de usuario
ben fransen

En mi rutas.php tengo:

Route::patch('/preferences/{id}', '[email protected]');

Y en el archivo de vista (cuenta/preferencias.blade.php) tengo:

{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}

Pero estoy recibiendo este error:

Ruta [/preferences/1] no definida

Un error similar ocurre al llamar al route() ayudante directamente:

route('/preferences/' . Auth::user()->id');

Creo que estoy malinterpretando los documentos sobre este tema, pero definí una ruta para las solicitudes PATCH con un parámetro determinado y lo configuré en la vista correctamente. ¿Qué estoy pasando por alto aquí?

  • defina sus espacios de nombres en el controlador de ruta de ruta.

    – Safoor Safdar

    25 de febrero de 2015 a las 8:51

  • echa un vistazo a: laravel.com/docs/5.0/routing#route-model-binding

    – Safoor Safdar

    25 de febrero de 2015 a las 8:51

  • Gracias por su respuesta. Pensé que el enlace del modelo de ruta solo es necesario para pasar objetos completos a la ruta, no solo un parámetro entero. No obstante, he intentado registrar un modelo. user de App\User al enrutador, pero aún así esto no funciona. También intenté probarlo con un cierre en la ruta en lugar de llamar al método de los controladores.

    – Ben Fransen

    25 de febrero de 2015 a las 9:06


los route() método, que se llama cuando lo hace ['route' => 'someroute'] en una apertura de formulario, quiere lo que se llama un ruta nombrada. Le das a una ruta un nombre como este:

Route::patch('/preferences/{id}',[
    'as' => 'user.preferences.update',
    'uses' => '[email protected]'
]);

Es decir, convierte el segundo argumento de la ruta en una matriz, donde especifica tanto el nombre de la ruta (el as), y también qué hacer cuando se golpea la ruta (el uses).

Luego, cuando abres el formulario, llamas a la ruta:

{!! Form::model(Auth::user(), [
    'method' => 'PATCH',
    'route' => ['user.preferences.update', Auth::user()->id]
]) !!}

Ahora, para una ruta sin parámetros, podría simplemente hacer 'route' => 'routename'pero como tiene un parámetro, crea una matriz en su lugar y proporciona los parámetros en orden.

Dicho todo esto, dado que parece que está actualizando las preferencias del usuario actual, le aconsejo que deje que el controlador de manejo verifique la identificación del usuario que ha iniciado sesión actualmente y base la actualización en eso; no hay necesidad de enviar la identificación en la URL y la ruta, a menos que sus usuarios también necesiten actualizar las preferencias de otros usuarios. 🙂

  • como seguimiento a esta pregunta, ¿qué sucede si la ruta es una ruta de recursos generada a partir de, por ejemplo,… Route::resource('/users', 'UserController');y route:list muestra que tiene un nombre de users.updatepero cuando intento generar la ruta me da ese error.. hace route() ¿Solo funciona para rutas nombradas explícitamente?

    – bruchowski

    06/04/2015 a las 23:15


  • no importa, excavado en el FormBuilder.php fuente, parece que esto funciona route: ['users.update', user]

    – bruchowski

    06/04/2015 a las 23:25

  • Mi problema fue que no me di cuenta de que mi ruta está dentro de un grupo. Lo que me obligó a agregar un prefijo al nombre que puse.

    – hossein

    16 de junio de 2019 a las 11:45

avatar de usuario
bantú

Este hilo es antiguo, pero fue el primero en aparecer, así que pensé en compartir mi solución también. Además de tener rutas con nombre en su routes.php expediente. Este error también puede ocurrir cuando tiene URL duplicadas en su archivo de rutas, pero con nombres diferentes, el error puede ser engañoso en este escenario. Ejemplo:

Route::any('official/form/reject-form', '[email protected]')
                                           ->name('reject-form');  

Route::any('official/form/accept-form', '[email protected]')
                                           ->name('accept-form');

Cambiar uno de los nombres resuelve el problema. Copiar, pegar y fatiga pueden llevarlo a este problema :).

  • Esto resolvió el problema para mí, eliminé la ruta que he creado para el registro (Route::get(‘/register’, ‘Auth\[email protected]’);) y dejé que Auth::routes() tome el control

    –Steve

    18 de julio de 2017 a las 7:59

  • Muchas gracias, me estaba volviendo loco con esto. definitivamente da problemas con las URL duplicadas, incluso si tiene nombres diferentes. 🙂

    – Hasham Ahmed

    15 oct 2018 a las 8:55

avatar de usuario
Alex por dentro

Si la ruta no está definida, verifique el archivo de enrutamiento web.php.

Route::get('/map', '[email protected]')->name('map'); // note the name() method.

Entonces puedes usar este método en las vistas:

<a class="nav-link" href="https://stackoverflow.com/questions/28714675/{{ route("map') }}">{{ __('Map') }}</a>

PD: el __(‘Mapa’) es para traducir “Mapa” al idioma actual.

Y la lista de nombres de rutas que puedes ver con el comando artesanal:

php artisan route:list

  • ¡Gracias! Gracias a php artisan route:list Me di cuenta que en dos rutas había definido la misma URL: '/same/url/in/both/routes'. Es por eso que uno de ellos no figuraba en la lista de rutas.

    – Patros

    8 oct 2019 a las 17:20


  • ¡Gracias! ¡Me salvó! route(‘about’) no fue accesible por alguna razón hasta que apliqué ->name(‘about’) al archivo web.php para la ruta.

    – Jeremy

    13 de junio de 2020 a las 15:08

Estoy usando Laravel 5.7 y probé todas las respuestas anteriores, pero nada parecía dar en el clavo.

Para mí, fue una solución bastante simple al eliminar los archivos de caché creados por Laravel.
Parecía que mis cambios no se reflejaban y, por lo tanto, mi aplicación no veía las rutas.

Un poco exagerado, pero decidí restablecer todo mi caché al mismo tiempo usando los siguientes comandos:

php artisan route:clear
php artisan view:clear
php artisan cache:clear

El principal aquí es el primer comando que eliminará el bootstrap/cache/routes.php expediente.
El segundo comando eliminará los archivos almacenados en caché para las vistas que están almacenadas en el storage/framework/cache carpeta.
Finalmente, el último comando borrará el caché de la aplicación.

cuando ejecutas el comando

php artisan route:list

Verá todas sus rutas registradas allí en formato de tabla. Bueno, allí ves muchas columnas como Método, URI, Nombre, Acción, etc.

Entonces, básicamente, si estás usando ruta() método que significa que sólo aceptará nombre valores de columna y si desea utilizar URI valores de columna con los que debe ir URL() método de laravel.

avatar de usuario
Adiyya Tadikamalla

Una causa más para esto:

Si el las rutas se anulan con el mismo URI (Sin saberlo), provoca este error:

P.ej:

Route::get('dashboard', ['uses' => '[email protected]', 'as' => 'my.dashboard']);
Route::get('dashboard/', ['uses' => '[email protected]', 'as' => 'my.home_dashboard']);

En este caso, la ruta ‘my.dashboard’ se invalida ya que ambas rutas tienen el mismo URI (‘dashboard’, ‘dashboard/’)

Solución: debe cambiar el URI para cualquiera de los dos

P.ej:

Route::get('dashboard', ['uses' => '[email protected]', 'as' => 'my.dashboard']);
Route::get('home-dashboard', ['uses' => '[email protected]', 'as' => 'my.home_dashboard']); 

// Ver el URI cambiado para este ‘tablero de inicio’

Espero que ayude a algunos una vez.

Mi caso es un poco diferente, ya que no es un formulario sino devolver una vista. Añadir método ->name('route').

MyView.blade.php Se ve como esto:

<a href="https://stackoverflow.com/questions/28714675/{{route("admin')}}">CATEGORIES</a>

Y web.php El archivo de rutas se define así:

Route::view('admin', 'admin.index')->name('admin');

¿Ha sido útil esta solución?