Personalizando la Lógica de Resolución de Rutas en Laravel
En Laravel, puedes personalizar la lógica de resolución de enlaces de modelo utilizando el método Route::bind
. Esto te permite definir cómo se deben resolver los parámetros de la ruta en función de los valores de la URI.
Donde escribir el código
El código debe ser escrito en el archivo routes/web.php
de tu aplicación Laravel.
Ejemplos de Código
php
use App\Models\User;
use Illuminate\Support\Facades\Route;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Route::bind('user', function (string $value) {
return User::where('name', $value)->firstOrFail();
});
}
Explicación del código
En este ejemplo, estamos utilizando el método Route::bind
para vincular el parámetro de la ruta user
a un modelo de usuario. La función anónima que pasamos a bind
recibe el valor de la URI y busca un usuario cuyo nombre coincida con ese valor. Si no se encuentra, se lanzará una excepción ModelNotFoundException
.
php
/**
* Retrieve the model for a bound value.
*
* @param mixed $value
* @param string|null $field
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function resolveRouteBinding($value, $field = null)
{
return $this->where('name', $value)->firstOrFail();
}
En este segundo ejemplo, estamos sobreescribiendo el método resolveRouteBinding
en nuestro modelo Eloquent. Este método se encarga de recibir el valor de la URI y devolver la instancia del modelo correspondiente. Al igual que en el primer ejemplo, si no se encuentra el modelo, se lanzará una excepción.
php
/**
* Retrieve the child model for a bound value.
*
* @param string $childType
* @param mixed $value
* @param string|null $field
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function resolveChildRouteBinding($childType, $value, $field)
{
return parent::resolveChildRouteBinding($childType, $value, $field);
}
Este último ejemplo muestra cómo se puede resolver el enlace de un modelo hijo utilizando el método resolveChildRouteBinding
. Este método se utiliza cuando se está trabajando con enlaces implícitos y se necesita resolver un modelo hijo en función del modelo padre.
Visualización Gráfica en Pantalla
Cuando se utiliza la lógica de resolución de enlaces de modelo, la URL podría verse así: www.conozcalaravel.test/user/johndoe
. Esto devolvería el usuario con el nombre «johndoe».
En la pantalla de Chrome, el resultado podría mostrarse como:
Nombre: John Doe
Email: johndoe@example.com
Esto se vería en el navegador como:
Email: johndoe@example.com
Conclusión
En resumen, personalizar la lógica de resolución de enlaces de modelo en Laravel te permite tener un control más preciso sobre cómo se manejan los parámetros de la ruta. Utilizando Route::bind
o sobreescribiendo métodos en tu modelo Eloquent, puedes definir cómo se deben resolver los modelos en función de los valores de la URI.
Para más información, visita la página oficial de Laravel y el curso de enrutamiento de Conozca Laravel.
Etiqueta:rutas