Simple, elegant Achievements the Laravel way.
The package has been developed and tested to work with the latest versions of PHP and Laravel as well as the following minimum requirements:
- Laravel 5.8
- PHP 7.1
Install the package via Composer.
composer require tehwave/laravel-achievements
Publish migrations.
php artisan vendor:publish --tag="achievements-migrations"
Migrate the migrations.
php artisan migrate
As an optional choice, you may publish config as well.
php artisan vendor:publish --tag="achievements-config"
Laravel Achievements
work much like Laravel's notifications.
$user = \App\User::find(1);
$user->achieve(new \App\Achievements\UsersFirstPost());
php artisan make:achievement UsersFirstPost
This command will place a fresh Achievement
class in your new app/Achievements
directory.
Each Achievement
class contains a toDatabase
method, that you may use to store additional data with the achievement, and a few properties for basic meta information.
Use Achiever
trait on models that can unlock achievements.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use tehwave\Achievements\Traits\Achiever;
class User extends Model
{
use Achiever;
// ...
}
Achieve an achievement via the achieve
method.
$user = \App\User::find(1);
$user->achieve(new \App\Achievements\UsersFirstPost());
...or use Achievement
class to unlock achievements.
$user = \App\User::find(1);
\tehwave\Achievements\Achievement::unlock($user, new \App\Achievements\UsersFirstPost());
Retrieve all of the entity's unlocked achievements.
$user = \App\User::find(1);
$user->achievements()->get();
On models with the Achiever
trait, you may pass an Achievement
instance to hasAchievement
method to check if the specified achievement exist on the model.
$achievement = new \App\Achievements\UsersFirstPost();
$user = \App\User::find(1);
$user->hasAchievement($achievement);
// false
$user->achieve($achievement);
$user->hasAchievement($achievement);
// true
Should you not want to pass an instance, you may also pass the class name.
$user->hasAchievement(\App\Achievements\UsersFirstPost::class);
composer test
For any security related issues, send a mail to [email protected] instead of using the issue tracker.
See CHANGELOG for details on what has changed.
See CONTRIBUTING for details on how to contribute.
Inspired by https://github.com/gstt/laravel-achievements
I work as a Web Developer in Denmark on Laravel and WordPress websites.
Follow me @tehwave on Twitter!