Livewire && Laravel Localization: The GET method is not supported for route livewire/update 404
Livewire && mcamara/laravel-localization: The GET method is not supported for route livewire/update 404
Introducción
Es terrible cuando aparecen los errores 404 en tu app con livewire. El mundo se apaga a tu alrededor y comienzas un viaje en el que no hay mucha información, hay mucha mezcla de datos inconexos y tu no sabes que hacer.
Voy a tratar este escenario, con todos los datos para que el que llegue aquí, sepa de que estamos hablando, por que es un caso concreto para un mismo enunciado: The GET method is not supported for route livewire/update 404
Escenario
En un aplicación que usa Laravel 11, FilamentAdmin y por extensión Livewire multi idioma, basado en la librería LaravelLocalization.
La cuestión es que al hacer click en el icono de expansión de un acordeón (accordion) típico de una sección FAQ, me saltaba un terrible error 404.
En la barra de debugger al margen de ver POST livewire/update
vemos su error.
The route es could not be found.
vendor/laravel/framework/src/Illuminate/Routing/AbstractRouteCollection.php#44
Symfony\Component\HttpKernel\Exception\NotFoundHttpException
return $this->getRouteForMethods($request, $others);
}
throw new NotFoundHttpException(sprintf(
'The route %s could not be found.',
$request->path()
));
Lo primero que pensamos es: bueno, esto trata de añadir a la configuracion de Laravel Localization, una exclusion de ese path
aunque habría que pensar que el método POST
ya esta excluido, luego no tiene sentido.
'urlsIgnored' => [
'/admin',
'/admin/*',
'/admin/multimedia',
'/storage/*',
'/articles/*',
'/_debugbar/*',
'/colours',
//'/livewire/*',
],
'httpMethodsIgnored' => ['POST', 'PUT', 'PATCH', 'DELETE'],
Así que no va por ahi.
Recuerdos de un 404 en Problem with site in production: livewire.js and app.js 404 y de otro tip con FilamentAdmin v3, para añadir al composer.json
en la sección scripts.post-update-cmd
"@php artisan vendor:publish --tag=livewire:assets --ansi --force"
Pero no. Eso ya lo uso.
La solución pasa por algo que esta en la documentación de Livewire, pero de esas cosas que pasan desapercibidas, como Configuring Livewire's update endpoint
- Añadir a la ruta que usa la localización en el frontend
Route::group(['prefix' => LaravelLocalization::setLocale()], function() {
Route::get('/', [HomeController::class, 'index']);
Route::get('/blog', [BlogController::class, 'index'])->name('blog.index');
Route::get('/blog/{article:slug}', [BlogController::class, 'article'])->name('blog.article');
// Esto es lo que hay que añadir
Livewire::setUpdateRoute(function ($handle) {
return Route::post('/livewire/update', $handle);
});
});
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.