O implementare a unui sistem de realizare in Laravel, inspirat din sistemul de notificare Laravel.

Cuprins

  1. Cerinte
  2. Instalare
  3. Crearea realizarilor
  4. Deblocarea realizarilor
  5. Adaugarea progresului
  6. Preluarea realizarilor
  7. Ascultatori de evenimente
  8. Licenta

Cerinte

  • Laravel 6 sau mai mare
  • PHP 7.2 sau mai mare

Versiuni si ramuri

  • v1. * – Spatiu de nume Gstt \ * original cu suport Laravel 6 si PHP7.2 (doar actualizari de corectie si securitate)
  • v2. * (master) – Nou spatiu de nume Assada \ * cu suport Laravel> = 6 si PHP7.2 (remedieri, securitate si actualizari de caracteristici)

Instalare

Instalarea implicita se face prin Composer.

compozitor necesita realizari assada / laravel

Furnizorul de servicii se va inregistra automat. Sau puteti adauga manual Furnizorul de servicii in fisierul de configurare / aplicatie din sectiunea furnizori.

‘providers’ => [// … Assada \ Achievements \ AchievementsServiceProvider :: class,]

Faceti o copie de rezerva a bazei de date si rulati migrarile pentru a configura tabelele necesare in baza de date.

Crearea realizarilor

Similar cu implementarea Laravel a Notificarilor, fiecare realizare este reprezentata de o singura clasa (de obicei stocata in directorul app \ Achievements.) Acest director va fi creat automat pentru dvs. atunci cand executati comanda make: achievement.

php artisan make: realizare UserMadeAPost

Aceasta comanda va pune o noua Realizare in directorul aplicatiei / Realizari cu numai doua proprietati definite: nume si descriere.

inazuma eleven xxx vecinasxxx
tetonas españolas follando sin querer
fire force hentai me follo a mi tia
necrofilia xxx www.maduras.con
orgasmos extremos pajas entre amigos
videos porno corridas incesto asiatico
casadas muy putas se le marca el coño
follando en el parque cartoon xxx
mi madre me folla hermanos rusos follando
sara rossi fakings follando en el parque
fiestas xxx maduras folladas por el culo
videos eroticos italianos abuelasputas
porno iberico folladas en el metro
peliculas eroticas gratis en español se folla a su compañero de piso
shakira follando pornolesvianas
abuelas y nietos xxx concursos nudistas
porno xxxxx videos eroticos italianos
orgias xxx casadas muy putas
coñitos violacion real porno
tetonas gratis videos gay xx

Ar trebui sa modificati valorile implicite pentru aceste proprietati cu ceva care explica mai bine ce este realizarea si cum sa o deblocati. Cand ati terminat, ar trebui sa arate astfel:

<? php namespace App \ Realizari; utilizati Assada \ Achievements \ Achievement; clasa UserMadeAPost extinde Realizarea {/ * * Numele realizarii * / public $ name = ‘Postare creata’; / * * O mica descriere pentru realizare * / public $ description = ‘Felicitari! Ati facut prima dvs. postare! ‘; }

Deblocarea realizarilor

Realizarile pot fi deblocate folosind trasatura Achiever.

<? php App spatiu de nume; utilizati Assada \ Achievements \ Achiever; utilizati Illuminate \ Foundation \ Auth \ User ca autentificabil; clasa Utilizator extinde Authenticatable {use Achiever; }

Aceasta trasatura contine metoda de deblocare, care poate fi utilizata pentru a debloca o realizare. Metoda de deblocare asteapta o instanta de realizare:

utilizati App \ Achievements \ UserMadeAPost; $ utilizator-> deblocare (nou UserMadeAPost ());

Amintiti-va ca nu sunteti limitat la clasa User. Puteti adauga trasatura Achiever oricarei entitati care ar putea debloca realizari.

Adaugarea progresului

In loc sa deblocati direct o realizare, puteti adauga un progres la aceasta. De exemplu, este posibil sa aveti o realizare UserMade10Posts si doriti sa tineti evidenta modului in care utilizatorul progreseaza in aceasta realizare.

Pentru a face acest lucru, trebuie sa setati un parametru suplimentar pentru clasa dvs. UserMade10Posts, numit $ points:

<? php namespace App \ Realizari; utilizati Assada \ Achievements \ Achievement; clasa UserMade10Posts extinde Realizarea {/ * * Numele realizarii * / public $ name = ’10 Postari create ‘; / * * O mica descriere pentru realizare * / public $ description = ‘Uau! Ati creat deja 10 postari! ‘; / * * Cantitatea de “puncte” pe care acest utilizator trebuie sa le obtina pentru a finaliza aceasta realizare * / puncte publice $ = 10; }

Acum puteti controla progresul prin metodele addProgress si removeProgress pe trasatura Achiever. Ambele metode asteapta o instanta de realizare si o cantitate de puncte de adaugat sau eliminat:

utilizati App \ Achievements \ UserMade10Posts; $ user-> addProgress (new UserMade10Posts (), 1); // Adauga 1 punct de progres la realizarea UserMade10Posts

In plus, puteti utiliza metodele resetProgress pentru a seta progresul inapoi la 0 si setProgress pentru a-l seta la o cantitate specificata de puncte:

utilizati App \ Achievements \ FiveConsecutiveSRanks; if ($ rank! = ‘S’) {$ user-> resetProgress (new FiveConsecutiveSRanks ()); } else {$ user-> addProgress (new FiveConsecutiveSRanks (), 1); }
utilizati App \ Achievements \ Have1000GoldOnTheBag; $ user-> setProgress (nou Have100GoldOnTheBag (), $ user-> amountOfGoldOnTheBag);

Odata ce o realizare atinge cantitatea definita de puncte, aceasta va fi deblocata automat.

Preluarea realizarilor

Trasatura Achiever adauga, de asemenea, o relatie convenabila entitatii care o implementeaza: realizari (). Il puteti folosi pentru a recupera progresul pentru toate realizarile cu care a interactionat entitatea. Deoarece realizarile () sunt o relatie, o puteti folosi ca QueryBuilder pentru a filtra datele si mai mult.

$ realizari = $ utilizator-> realizari; $ unlocked_today = $ utilizator-> realizari () -> unde (‘unlocked_at’, ‘> =’, Carbon :: ieri ()) -> get ();

De asemenea, puteti cauta o realizare specifica folosind metoda achievementStatus ().

$ details = $ user-> achievementStatus (new UserMade10Posts ());

Exista, de asemenea, trei ajutoare suplimentare pe trasatura Achiever: lockedAchievements (), inProgressAchievements () si unlockedAchievements ().

Ascultatori de evenimente

Ascultarea tuturor realizarilor

Laravel Achievements ofera doua evenimente care pot fi ascultate pentru a oferi mesaje „Achievement Unlocked” sau altele similare. Ambele evenimente primesc instanta AchievementProgress care le-a declansat.

Evenimentul Assada \ Achievements \ Event \ Progress se declanseaza ori de cate ori un Achiever progreseaza, dar nu deblocheaza o Achievement. Evenimentul Assada \ Achievements \ Event \ Unlocked se declanseaza ori de cate ori un Achiever deblocheaza efectiv o realizare.

Detalii despre cum sa ascultati aceste evenimente sunt explicate in documentatia evenimentului Laravel.

Ascultarea unor realizari specifice

Ascultatorii de evenimente mentionati mai sus declanseaza toate realizarile. Daca doriti sa adaugati un ascultator de evenimente doar pentru o anumita realizare, puteti face acest lucru prin implementarea metodelor whenUnlocked sau whenProgress in clasa Achievement.

<? php namespace App \ Realizari; utilizati Assada \ Achievements \ Achievement; clasa UserMade50Posts extinde Realizarea {/ * * Numele realizarii * / public $ name = ’50 Postari create ‘; / * * O mica descriere pentru realizare * / public $ description = ‘Uau! Ati creat deja 50 de postari! ‘; / * * Cantitatea de „puncte” pe care acest utilizator trebuie sa le obtina pentru a finaliza aceasta realizare * / puncte publice $ = 50; / * * Se declanseaza ori de cate ori un realizator face progrese in aceasta realizare * / functie publica whenProgress ($ progress) {} / * * Se declanseaza ori de cate ori un Achiever deblocheaza aceasta realizare * / functie publica cand Unlocked ($ progress) {}}

Licenta

Laravel Achievements este un software open-source licentiat sub licenta MIT.