Skip to main content

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.

Barra de depuración : Herramientas del desarrollador

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.