07/12/2019
Lo que vendrá con Laravel 7: Binding de Modelos Implícitos 😱
¿Qué son los Binding de Modelos?
Los binding de modelos en las rutas es una característica muy poderosa que tiene Laravel. Cuando indicamos que una ruta va a recibir un ID, por ejemplo Route::get('post/{id}', 'PostController@show'); podemos cambiar el parámetro {id} por el nombre del modelo que queremos obtener, {post} e igualmente enviamos el valor del ID.
De esta manera, Laravel buscara automática el post con dicho ID y tendremos disponible el modelo encontrado, en nuestro controlador. En caso que no encuentre el registro, arrojara un error 404.
Y a partir de aquí ya podríamos enviar el titulo del post formateado en slug, en vez del ID del producto.
Lo nuevo de Laravel 7: Binding de Modelos Implícitos en las Rutas
A partir de Laravel 7 podremos especificar directamente en la ruta el campo por el que queremos que se haga el binding. Por ejemplo, el caso anterior se reemplazaría con el siguiente código:
Route::get('/posts/{post:slug}', 'PostController@show');
Ayudándonos con los dos puntos, establecemos el campo de post por el cual queremos que se haga el binding. Y ya no es necesario sobrescribir el método getRouteKeyName().
Cabe aclarar, que el método getRouteKeyName() no quedara en desuso, por lo tanto, tus proyectos actuales que lo estén utilizando, no tendrán problemas.
Lo mejor de todo, es que vamos a poder definir rutas para la misma entidad pero que se vinculen por distintos campos. Cosa que, con la forma de sobrescribir el método, no podíamos.
Por ejemplo, podríamos tener:
Route::get('/posts/{post:slug}', 'PostController@show');
Y también podríamos tener:
Route::get('/posts/{post:id}/edit', 'PostController@edit');
CONCLUSIÓN ... nos facilita el trabajo de gestionar el campo slug y hacer una consulta para comparar y evaluar el resultado..... ahora es mucho más sencillo.✅😆🇵🇪🇵🇪🇵🇪🇵🇪