tbdscripts / laravel-achievements
Simple, elegant Achievements the Laravel way
This package's canonical repository appears to be gone and the package has been frozen as a result.
Requires
- php: ^7.4
- illuminate/console: ^8.0
- illuminate/database: ^8.0
- illuminate/filesystem: ^8.0
- illuminate/support: ^8.0
- ramsey/uuid: ^4.1.1
Requires (Dev)
- orchestra/testbench: ^v6.3.0
- phpunit/phpunit: ^9.0
README
Simple, elegant Achievements the Laravel way.
Requirements
The package has been developed and tested to work with the following minimum requirements:
- Laravel 5.8
- PHP 7.1
Installation
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"
Usage
Laravel Achievements
work much like Laravel's notifications.
$user = \App\User::find(1); $user->achieve(new \App\Achievements\UsersFirstPost());
Creating Achievements
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.
Unlocking Achievements
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());
Accessing Achievements
Retrieve all of the entity's unlocked achievements.
$user = \App\User::find(1); $user->achievements()->get();
Checking if entity has Achievement
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);
Tests
composer test
Security
For any security related issues, send a mail to peterchrjoergensen+achievements@gmail.com instead of using the issue tracker.
Changelog
See CHANGELOG for details on what has changed.
Contributions
See CONTRIBUTING for details on how to contribute.
Credits
Inspired by https://github.com/gstt/laravel-achievements
About
I work as a Web Developer in Denmark on Laravel and WordPress websites.
Follow me @tehwave on Twitter!