Personalizar las respuestas 404 en los Model Binding

  • Publicado el 18 octubre, 2024
  • Palabras: 456

¿Alguna vez un usuario ha llegado a una página 404 y has deseado poder hacer algo más inteligente que simplemente mostrar un error? ¡El método missing() de Laravel está aquí para ayudarte con eso! Veamos cómo puede manejar con elegancia los modelos que no existen en tus rutas.

Personalizar las respuestas 404 en los Model Binding

#¿Qué hace el método missing()?

 

El método missing te permite definir un comportamiento personalizado cuando no se encuentra un modelo vinculado de forma implícita. Es como tener un acomodador amigable que redirija a los visitantes perdidos en lugar de cerrarles la puerta en las narices.

 

#Uso básico

 

Aquí te explicamos cómo puedes usarlo:

 

use AppHttpControllersLocationsController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesRedirect;

Route::get('/locations/{location:slug}', [LocationsController::class, 'show'])
    ->name('locations.view')
    ->missing(function (Request $request) {
        return Redirect::route('locations.index');
    });

 

#Ejemplo práctico: redireccionamientos de productos inteligentes

 

Supongamos que estás creando un sitio de comercio electrónico. Así es como puedes solucionar el problema de los productos que faltan:

 

use AppModelsProduct;
use AppHttpControllersProductController;
use IlluminateHttpRequest;

Route::get('/products/{product:slug}', [ProductController::class, 'show'])
    ->name('products.show')
    ->missing(function (Request $request) {
        // Try to find a similar product
        $similarProduct = Product::where('name', 'like', "%{$request->product}%")
            ->first();

        if ($similarProduct) {
            return redirect()->route('products.show', $similarProduct->slug)
                ->with('message', 'The product you looked for was not found, but you might be interested in this.');
        }

        // If no similar product, redirect to the category page if we can guess it
        $guessedCategory = guessCategory($request->product);
        if ($guessedCategory) {
            return redirect()->route('categories.show', $guessedCategory)
                ->with('message', 'Product not found. Check out our ' . $guessedCategory . ' category.');
        }

        // As a last resort, go to the products index
        return redirect()->route('products.index')
            ->with('message', 'Product not found. Browse our catalog to find what you need.');
    });

function guessCategory($productSlug) {
    // Logic to guess the category based on the product slug
    // This could involve keyword matching, database lookups, etc.
}

 

En este ejemplo:

 

  • Primero intentamos encontrar un producto similar en función del nombre
  • Si eso falla, intentamos adivinar la categoría
  • Como último recurso, los enviamos al catálogo principal de productos

 

Al usar el método missing, no solo estás manejando errores, sino que estás creando oportunidades para guiar e involucrar a tus usuarios. ¡Es una herramienta poderosa para crear una aplicación Laravel más sólida y fácil de usar!

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión