A package to create readable, random slugs for Eloquent models from animal names and adjectives.
matteoggl/linnaeus is a Laravel package for a package to create readable, random slugs for eloquent models from animal names and adjectives..
It currently has 21 GitHub stars and 7.271 downloads on Packagist (latest version 1.1.0).
Install it with composer require matteoggl/linnaeus.
Discover more Laravel packages by matteoggl
or browse all Laravel packages to compare alternatives.
Last updated
A package to create readable, random slugs for Eloquent models from animal names and adjectives.
Just require the package through composer:
composer require matteoggl/linnaeus
Add the HasSlug trait on your Eloquent model and insert a column on it's table named slug, of type string with a
unique modifier.
$table->string('slug')->unique();
By default, a new unique string taken from a combination of 900~ adjectives, 100+ colors and 250~ animals is assigned to the model when created with the following structure: adjective-adjective-animal.
When updated, the slug will not be changed and if soft-deletable, the model's slug will be considered used.
The slugs are used with Laravel's implicit route model binding. For example, this code:
Route::get('/users/{user}', function (App\User $user) {
return $user->email;
});
will use Linnaeus' slugs (e.g. /users/moldy-encouraging-turtle).
To publish the configuration file, run the following command:
php artisan vendor:publish --provider="MatteoGgl\Linnaeus\LinnaeusServiceProvider" --tag="config"
The linnaeus.php configuration file will appear in your config/ directory.
Some options can be overridden by updating them inside the model constructor, using a fluent API; here's an example using all the available ones:
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
$this->linnaeus = LinnaeusOptions::create()
->withKey('linnaeus_slug')
->withStructure(['color', 'animal'])
->withSeparator('_')
->generatesOnUpdate()
->withInvalidAnimals(['aardvark'])
->withInvalidAdjectives(['zany'])
->withInvalidColors(['blue']);
}
Q: What's up with the name?
A: Take a look at Carl Linnaeus on Wikipedia
Q: Can this package do feature?
A: I created this package out of a need for a personal project. If you have some suggestions feel free to open an issue or a PR! Also, this package is heavily inspired from spatie/laravel-sluggable; maybe the features you are looking for are there.