Using a slug as the route key in Laravel

Use pretty URLs for your Laravel project by implementing slugs and avoid the integer id as the route key.

The following 2 URL examples are for the route

/location/{location}

This first one is the default where the route key is the id

domain.com/location/34

It’s not a good practice for SEO nor is it human readable.

Instead of this you can use a “slug” for the location title. A slug is a string that is URL safe with dashes instead of spaces.

Los Angeles has a slug of los-angeles, whilst North Las Vegas has a slug north-las-vegas

This second URL is using the slug as the route key

domain.com/location/los-angeles

You do this by customizing the key with getRouteKeyName function in the models class

public function getRouteKeyName(): string
{
    return 'slug';
}

It is returning “slug” because that is the database column I want the route key to be.

If the slug isn’t found then an HTTP 404 error will be thrown.