spatie/laravel-sluggable
Generate unique slugs for Eloquent models on create/update. Supports collision suffixes, translatable slugs, and customizable slug options. Includes self-healing URLs that keep old links working via slug+ID route keys with 308 redirects to the canonical URL.
Slugs are unique by default. On a collision, the package appends a counter starting at 1 (for example this-is-an-example, this-is-an-example-1, this-is-an-example-2). Two builder methods change how that suffix is generated. They live on SlugOptions and are not available through the attribute.
startSlugSuffixFrom() sets the first numeric suffix used on a collision.
SlugOptions::create()
->generateSlugsFrom('name')
->saveSlugsTo('slug')
->startSlugSuffixFrom(2);
useSuffixOnFirstOccurrence() adds a suffix even when the slug would otherwise be unique. Instead of this-is-an-example, this-is-an-example-1, you get this-is-an-example-1, this-is-an-example-2.
SlugOptions::create()
->generateSlugsFrom('name')
->saveSlugsTo('slug')
->useSuffixOnFirstOccurrence();
For a non-numeric or otherwise custom suffix, use the trait's usingSuffixGenerator(). See A custom suffix generator.
How can I help you explore Laravel packages today?