php - route - ¿La ruta Laravel 5 no está definida, mientras que es?
route name laravel (7)
Estoy un poco confundido sobre cómo se supone que funciona. Pero recibo un error Route [/preferences/1] not defined
.
En mi routes.php tengo:
Route::patch(''/preferences/{id}'', ''UserController@update'');
Y en el archivo de vista (account / preferences.blade.php) tengo:
{!! Form::model(Auth::user(), [''method'' => ''PATCH'', ''route'' => ''/preferences/'' . Auth::user()->id]) !!}
Me aparece un error que me dice que la ruta no existe. Creo que estoy malinterpretando los documentos sobre este tema, pero en mi opinión, he definido una ruta para las solicitudes PATCH con un parámetro dado, y configuré esto en la vista correctamente.
¿Qué estoy pasando por alto aquí?
El método route()
, que se llama cuando haces [''route'' => ''someroute'']
en una apertura de formulario, quiere lo que se llama una ruta con nombre . Le das a una ruta un nombre como este:
Route::patch(''/preferences/{id}'',[
''as'' => ''user.preferences.update'',
''uses'' => ''UserController@update''
]);
Es decir, usted convierte el segundo argumento de la ruta en una matriz, donde especifica tanto el nombre de la ruta (el as
) como también qué hacer cuando la ruta se golpea (los uses
).
Luego, cuando abre el formulario, llama a la ruta:
{!! Form::model(Auth::user(), [
''method'' => ''PATCH'',
''route'' => [''user.preferences.update'', Auth::user()->id]
]) !!}
Ahora, para una ruta sin parámetros, puede hacer ''route'' => ''routename''
, pero como tiene un parámetro, en su lugar ''route'' => ''routename''
una matriz y proporciona los parámetros en orden.
Dicho todo esto, dado que parece que estás actualizando las preferencias del usuario actual, te aconsejaría que permitas que el controlador de manejo verifique el ID del usuario que está conectado actualmente, y base la actualización en eso; no es necesario enviar el ID. en la url y en la ruta a menos que los usuarios también necesiten actualizar las preferencias de otros usuarios. :)
En mi caso, la solución fue simple:
route.php
la ruta al comienzo del archivo route.php
.
Después de mover la ruta nombrada al final, mi aplicación finalmente la vio. Significa que de alguna manera la ruta se definió demasiado temprano.
En otros comentarios:
Tuve problemas similares en los que muchas veces aparece el error Método de acción no encontrado, pero claramente se define en el controlador.
El problema no está en el controlador, sino en cómo se configura el archivo routes.php
Digamos que tienes la clase Controller establecida como un recurso en el archivo route.php
Route::resource(''example'', ''ExampleController'');
entonces ''/ example'' tendrá todos los recursos RESTful enumerados aquí: http://laravel.com/docs/5.0/controllers#restful-resource-controllers
pero ahora quiere tener alguna definición en forma, por ejemplo: ''acción'' => ''ExampleController @ postStore'', entonces tiene que cambiar esta ruta (en el archivo route.php) a:
Route::controller(''example'', ''ExampleController'');
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 archivo routes.php. Este error también puede ocurrir cuando tiene URL duplicadas en su archivo de rutas, pero con diferentes nombres el error puede ser engañoso en este escenario. Ejemplo
Route::any(''official/form/reject-form}'', ''FormStatus@rejectForm'')->name(''reject-form'');
Route::any(''official/form/accept-form'', ''FormStatus@acceptForm'')->name(''reject-form'');
El cambio de los nombres resuelve el problema. Copiar pegar y fatiga te llevará a este problema :).
Mi caso es un poco diferente, ya que no es una forma, sino devolver una vista. Agregar método ->name(''route'')
.
MyView.blade.php
ve así:
<a href="{{route(''admin'')}}">CATEGORIES</a>
Y el archivo de rutas web.php
se define así:
Route::view(''admin'', ''admin.index'')->name(''admin'');
Si la ruta no está definida, entonces verifique el archivo de enrutamiento web.php.
Route::get(''/map'', ''BiolinkController@map'')->name(''map''); // note the name() method.
Entonces puedes usar este método en las vistas:
<a class="nav-link" href="{{ 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 de artesano:
php artisan route:list
Tuve el mismo problema y encontré la solución últimamente.
debes verificar si tu ruta está dentro de una ruta :: grupo
como aquí:
Route::group([''prefix'' => ''Auth'', ''as'' => ''Auth.'', ''namespace'' => ''Auth'', ''middleware'' => ''Auth'']
si es así, debe usarlo en el archivo de vista. como aquí:
!! Form::model(Auth::user(), [''method'' => ''PATCH'', ''route'' => ''Auth.preferences/'' . Auth::user()->id]) !!}