Genera URLs usando eloquent en laravel de forma sencilla

Angel Cruz
Angel Cruz
Tabla de contenidos

Hace unos días, en laravel news apareció un tutorial de Jordan Dalton donde explica como generar urls usando eloquent y en base a ese tutorial voy a mostrarles como lo adapté a mi proyecto.

Antes de seguir leyendo les recomiendo que vayan al artículo de Laravel News para que entiendan lo que voy hablar. Para eso hagan clic aquí en este link.

Ok, ahora les contaré lo que hice:

Básicamente lo que hice fue modificar la clase UrlPresenter para que aceptara un parámetro adicional y quedó de la siguiente forma:

1<?php
2namespace {{ namespace }};
3 
4use Illuminate\Database\Eloquent\Model;
5 
6class UrlPresenter
7{
8 protected Model $model;
9 protected string $modelName;
10 
11 public function __construct(Model $model, string $modelName)
12 {
13 $this->model = $model;
14 $this->modelName = $modelName;
15 }
16 
17 public function __get($key)
18 {
19 if(method_exists($this, $key)) {
20 return $this->$key();
21 }
22 
23 return $this->$key;
24 }
25 
26 public function show(): string
27 {
28 return route("{$this->modelName}.show", $this->model);
29 }
30}

Y en el modelo usuarios coloqué esto:

1public function getUrlAttribute()
2{
3 return new UrlPresenter($this, 'users');
4}

Las razón? Pues simplemente porque no quería crear una clase por cada modelo en el que estoy trabajando y al pasarle el nombre del modelo (en este ejemplo "users") puedo generar todas las url que necesito sin ningun tipo de problema.

La forma de usarlo sería la misma como lo explicó Jordan:

1<a href="{{ $user->url->show }}">{{ $user->name }}</a>

Probablemente existe una mejor forma de hacerlo, si la conoces puedes decirme?

Espero les sirva este post!!

Te podrá interesar
Cursor anunció un ajuste en sus precios a partir del 15 de septiembre de 2025. Descubre cómo afectará a los usuarios, por qué ocurre este cambio y qué alternativas existen.
GitHub no cierra, pero ya no será lo mismo. Con la salida de Thomas Dohmke como CEO y la decisión de Microsoft de no reemplazarlo, la plataforma dejará de operar como entidad independiente y pasará a formar parte del equipo CoreAI, liderado por Jay Parikh.
Aprende cómo crear reglas personalizadas en Cursor IDE paso a paso. Incluye ejemplos, mejores prácticas y un generador de reglas online para facilitar el proceso.
Logo de Angel Cruz

Made with ♥️ & 🧉 in Montevideo, Uruguay Buenos Aires, Argentina.

[AC].dev is not affiliated with Laravel or Laravel LLC. Laravel is a Trademark of Taylor Otwell.

Code highlighting provided by Torchlight.