yabhq / laravel-mint
A collection of traits, macros and other helpers to keep your Laravel app feeling fresh.
Installs: 19 979
Dependents: 1
Suggesters: 0
Security: 0
Stars: 7
Watchers: 3
Forks: 2
Open Issues: 0
Requires
- php: ^8.2|^8.3
- illuminate/support: ^9|^10|^11
- laravel/legacy-factories: ^1.0
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^10.0
README
Mint for Laravel
A collection of traits, macros and other helpers to keep your Laravel app feeling fresh.
Installation
composer require yabhq/laravel-mint
Archivable
Allow for models to be archived or unarchived based on an "archived_at" field on the database table. A global scope automatically excludes archived records when querying your model.
use Yab\Mint\Traits\Archivable; class Example extends Model { use Archivable; }
$example->archive(); $example->unarchive(); Example::query(); // Will exclude archived items... Example::withArchived(); // With archived items included...
Immutable
Models which are marked as "immutable" will throw an ImmutableDataException if updated or deleted (but not created).
use Yab\Mint\Traits\Immutable; class Example extends Model { use Immutable; }
// No problem $example = Example::create([ 'field' => 'value' ]); // Throws an exception... $example->update([ 'field' => 'updated' ]);
You can also customize the conditions under which a model is immutable by overriding the isImmutable() function on your model:
public function isImmutable() { return $this->status === 'closed'; }
UUID Models
Easily use UUIDs for your model's primary key by leveraging the UuidModel trait:
use Yab\Mint\Traits\UuidModel; class Example extends Model { use UuidModel; }
If you would like to customize the name of the UUID column, simply add the getUuidColumnName function in your model class:
public static function getUuidColumnName(): string { return 'my_column_name'; }
Money Cast
A custom cast for storing monetary values as cents in the database while fetching them as decimal values.
use Yab\Mint\Casts\Money; class Example extends Model { protected $casts = [ 'price' => Money::class, ]; }
Slugify
Create slugs that are unique and never collide with each other.
use Yab\Mint\Trails\Slugify; class Example extends Model { use Slugify }
By default the Slugify trait uses the name property on your model. You can change this behaviour by overriding the getSlugKeyName method on your model.
public static function getSlugKeyName(): string { return 'title'; }
Avatars
The HasAvatar trait allows you to easily support avatars for your users. It even has a built-in Gravatar fallback!
use Yab\Mint\Trails\HasAvatar; class User extends Model { use HasAvatar; }
You can customize the database field used to retrieve the profile images:
public function getAvatarField() : string { return 'profile_picture'; }
It is also possible to determine which field is used for the Gravatar email address:
public function getEmailField(): string { return 'email'; }