Laravel Packages

Self-healing URLs in Laravel

Published

Laravel community member Aaron Francis shared an awesome video demonstrating how to Make self-healing URLs with Laravel. Without surprise, multiple packages in the Laravel ecosystem have already surfaced:

These packages have a similar goal: you can change your model's route slug at will or only partially match a URL and never have to worry about SEO indexing when the slug changes. Both packages work by adding a trait to a model (this example is taken from Luke's package), which handles identifying the model via route model binding:

use Lukeraymonddowning\SelfHealingUrls\Concerns\HasSelfHealingUrls;
 
class Post extends Model
{
use HasSelfHealingUrls;
 
// Optional custom model property (default is `slug`)
protected $slug = 'title';
}

Note: both packages have different implementations, so be sure to follow the respective README files to get started.

Luke's package also has the ability to customize the way a slug is joined to a model identifier; you can create your own custom IdentifierHandler implementation. At the time of writing, the package ships with a HyphenIdentifierHandler that looks like this:

namespace Lukeraymonddowning\SelfHealingUrls\IdentifierHandlers;
 
use Illuminate\Support\Str;
use Lukeraymonddowning\SelfHealingUrls\Contracts\IdentifierHandler;
 
class HyphenIdentifierHandler implements IdentifierHandler
{
public function joinToSlug(string $slug, string|int $identifier): string
{
return "{$slug}-{$identifier}";
}
 
public function separateFromSlug(string $value): string
{
return Str::afterLast($value, '-');
}
}

You can implement this interface to come up with your customized handler if you want to use a different identifier than a slug and a unique identifier separated by a hyphen (-). I'd encourage you to watch Aaron's video to see what's going on under the hood in Laravel and try both implementations to see what you like.

Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article