Notificări în Laravel

În acest articol, vom explora sistemul de notificare în cadrul web Laravel. Sistemul de notificare din Laravel vă permite să trimiteți notificări către utilizatori pe diferite canale. Astăzi, vom discuta modul în care puteți trimite notificări prin intermediul canalului de e-mail.

Noțiuni de bază privind notificările

În timpul dezvoltării aplicațiilor, trebuie adesea să informați utilizatorii despre diferite schimbări de stat. Poate fie să trimiteți notificări prin e-mail atunci când starea comenzii este modificată, fie să trimiteți un SMS despre activitatea lor de conectare din motive de securitate. În special, vorbim despre mesaje care sunt scurte și oferă doar o perspectivă asupra schimbărilor de stat.

Laravel oferă deja o funcție încorporată care ne ajută să realizăm o notificare similară. De fapt, face trimiterea mesajelor de notificare utilizatorilor o briză și o experiență distractivă!

Frumusețea acestei abordări este că vă permite să alegeți dintre diferitele canale pe care vor fi trimise notificările. Să trecem rapid la diferitele canale de notificare susținute de Laravel.

  • Poștă: Notificările vor fi trimise sub formă de e-mail către utilizatori.
  • MESAJ: După cum sugerează și numele, utilizatorii vor primi notificări prin SMS pe telefonul lor.
  • slack: În acest caz, notificările vor fi trimise pe canalele Slack.
  • Bază de date: Această opțiune vă permite să stocați notificări într-o bază de date dacă doriți să creați un interfață utilizator personalizat pentru ao afișa.

Dintre diferitele canale de notificare, vom folosi canalul de e-mail în exemplul cazului nostru de utilizare pe care îl vom dezvolta pe parcursul acestui tutorial.

De fapt, va fi un caz simplu de utilizare care permite utilizatorilor aplicației noastre să trimită mesaje către fiecare utilizator. Când utilizatorii primesc un mesaj nou în căsuța de e-mail, le vom notifica despre acest eveniment trimițând un e-mail acestora. Desigur, vom face acest lucru folosind funcția de notificare a lui Laravel!

Creați o clasă de notificare personalizată

După cum am discutat mai devreme, vom crea o aplicație care să permită utilizatorilor aplicației noastre să trimită mesaje reciproc. Pe de altă parte, vom notifica utilizatorii atunci când primesc un mesaj nou de la alți utilizatori prin e-mail.

În această secțiune, vom crea fișierele necesare care sunt necesare pentru a implementa cazul de utilizare pe care îl căutăm.

Pentru a începe, să creați Mesaj model care conține mesajele trimise de utilizatori între ele.

$ php artizan face: model Mesaj - migrare

Trebuie, de asemenea, să adăugăm câțiva câmpuri la, din și mesaj la mesaje masa. Deci, să schimbăm fișierul de migrare înainte de a rula migra comanda.

incremente ( 'id'); $ table-> integer ('de la', FALSE, TRUE); $ table-> întreg ('to', FALSE, TRUE); $ Table-> text ( 'mesaj'); $ Table-> timestamps (); );  / ** * Reveniți la migrații. * * @return void * / funcția publică în jos () Schema :: dropIfExists ('mesaje'); 

Acum, să executați comanda de migrare care creează tabela de mesaje în baza de date.

$ php artizan migrează

Aceasta ar trebui să creeze mesaje tabel în baza de date.

De asemenea, asigurați-vă că ați activat în primul rând sistemul de autentificare Laravel implicit, astfel încât funcțiile precum înregistrarea și conectarea să funcționeze din cutie. Dacă nu sunteți sigur cum să faceți acest lucru, documentația Laravel oferă o perspectivă rapidă asupra acestui aspect.

Deoarece fiecare notificare din Laravel este reprezentată de o clasă separată, trebuie să creați o clasă de notificare personalizată care va fi utilizată pentru a notifica utilizatorii. Să utilizăm următoarea comandă artizanală pentru a crea o clasă de notificare personalizată - NewMessage.

$ php artisan face: notificare NewMessage

Aceasta ar trebui să creeze app / Notificări / NewMessage.php class, deci să înlocuim conținutul acelui fișier cu următorul conținut.

fromUser = $ user;  / ** * Obțineți canalele de livrare ale notificării. * * @param amestecat $ notifiable * @return array * / funcția publică prin ($ notifiable) return ['mail'];  / ** * Obțineți reprezentarea prin poștă a notificării. ($ notifiable) $ subject = sprintf ('% s: Ați primit un mesaj nou de la% s!' , config ('app.name'), $ this-> fromUser-> name); $ greeting = sprintf ("Bună ziua% s!", $ notifiable-> name); retur (noul MailMessage) -> subiect ($ subiect) -> salut ($ salutare) -> salut (' url ('/')) -> linie ('Vă mulțumim pentru utilizarea aplicației noastre!');  / ** * Obținerea reprezentării matrice a notificării. * * @param amestecat $ notifiable * @return array * / funcția publică toArray ($ notifiable) return [//]; 

Întrucât vom folosi canalul de poștă electronică pentru a trimite notificări utilizatorilor, prin intermediul metoda este configurată în consecință. Deci, aceasta este metoda care vă permite să configurați tipul de canal al unei notificări.

Mai departe, există toMail care vă permite să configurați diferiți parametri de e-mail. De fapt, toMail metoda ar trebui să returneze instanța \ Illuminate \ Notificări \ Mesaje \ MailMessage, iar acea clasă oferă metode utile care vă permit să configurați parametrii de e-mail.

Dintre diferitele metode, linia vă permite să adăugați o singură linie într-un mesaj. Pe de altă parte, există acțiune care vă permite să adăugați un buton de chemare la acțiune într-un mesaj.

În acest fel, puteți formata un mesaj care va fi trimis utilizatorilor. De aceea ar trebui să configurați clasa de notificări în timp ce utilizați canalul de e-mail pentru a trimite notificări.

În final, trebuie să vă asigurați că implementați metodele necesare în funcție de tipul de canal configurat în prin intermediul metodă. De exemplu, dacă utilizați canalul bazei de date care stochează notificările într-o bază de date, nu este necesar să configurați toMail metodă; în schimb, ar trebui să pună în aplicare toArray care formulează datele care trebuie stocate într-o bază de date.

Cum să trimiteți notificări

În secțiunea anterioară, am creat o clasă de notificări care este gata să trimită notificări. În această secțiune, vom crea fișiere care să demonstreze modul în care puteați să trimiteți notificări folosind Mesaj nou clasa de notificare.

Să creăm un fișier de controler la app / HTTP / Controllers / NotificationController.php cu următorul conținut.

middleware ( 'auth');  indexul funcției publice () // user 2 trimite un mesaj utilizatorului 1 $ message = mesaj nou; $ message-> setAttribute ('de la', 2); $ message-> setAttribute ('to', 1); $ message-> setAttribute ('message', 'Demo message from user 2 to user 1.'); $ Message> Salvare (); $ dinUser = Utilizator :: găsi (2); $ toUser = Utilizator :: găsi (1); // trimiteți notificarea utilizând modelul "utilizator", atunci când utilizatorul primește un mesaj nou $ toUser-> notify (noul NewMessage ($ fromUser)); // trimiteți notificări utilizând notificarea de fațadă "Notificare" :: trimiteți ($ toUser, new NewMessage ($ fromUser)); 

Desigur, trebuie să adăugați o rută asociată în rute / web.php fişier.

Route :: get ('notify / index', 'NotificationController @ index');

Există două moduri în care Laravel vă permite să trimiteți notificări: utilizând fie entitatea notificabilă, fie fațada de notificare.

Dacă clasa de model entitate utilizează Illuminate Notificări \ \ notificabile trait, atunci ați putea apela notifica pe acest model. App \ utilizator clasa implementează notificabile și astfel devine entitatea notificabilă. Pe de altă parte, puteți utiliza și Illuminate \ Suport \ Fațade \ Notificare Fata pentru a trimite notificări utilizatorilor.

Să trecem prin index metodă a controlorului.

În cazul nostru, vom notifica utilizatorii atunci când primesc un mesaj nou. Așa că am încercat să imităm acest comportament în index în primul rând.

Apoi, am notificat utilizatorul destinatar despre un nou mesaj folosind notifica metoda pe $ toUser obiect, așa cum este declarare obligatorie entitate.

$ toUser-> notificare (noul NewMessage ($ dinUser));

S-ar putea să fi observat că trecem și noi $ fromUser obiecte în primul argument al __construi , deoarece dorim să includem din nume de utilizator într-un mesaj.

Pe de altă parte, dacă doriți să o imitați utilizând Notificare faade, este destul de ușor să faceți acest lucru utilizând următorul fragment.

Notificare :: trimite ($ toUser, new NewMessage ($ fromUser));

După cum puteți vedea, am folosit-o trimite metodă a fatadei de notificare pentru a trimite o notificare unui utilizator.

Mergeți mai departe și deschideți adresa URL http: // your-laravel-site-domain / notify / index în browserul dvs. Dacă nu sunteți încă conectat (ă), veți fi redirecționat (ă) la ecranul de conectare. După ce v-ați conectat, trebuie să primiți un e-mail de notificare la adresa de e-mail atașată utilizatorului 1.

S-ar putea să te întrebi cum detectează sistemul de notificare la adresa dacă nu l-am configurat nicăieri. În acest caz, sistemul de notificare încearcă să găsească e-mail proprietate în obiectul notificat. Si App \ utilizator clasa de obiecte are deja acea proprietate deoarece folosim sistemul de autentificare implicit Laravel.

Cu toate acestea, dacă doriți să înlocuiți acest comportament și doriți să utilizați o altă proprietate decât cea de e-mail, trebuie să definiți următoarea metodă în clasa de notificare.

funcția publică funcțiaNotificationForMail () return $ this-> email_address; 

Acum, sistemul de notificare ar trebui să caute adresa de email proprietate în loc de e-mail de proprietate pentru a prelua la adresa.

Și așa se folosește sistemul de notificare din Laravel. Asta ne aduce și la sfârșitul acestui articol!

Concluzie

Ceea ce am trecut astăzi este una dintre trăsăturile utile, dar cele mai puțin discutate, în Laravel-notificări. Acesta vă permite să trimiteți notificări utilizatorilor pe canale diferite.

După o introducere rapidă, am implementat un exemplu din lumea reală care a demonstrat modul de trimitere a notificărilor prin canalul de e-mail. De fapt, este foarte util în cazul trimiterii de mesaje scurte despre modificările de stat din aplicația dvs..

Pentru cei care sunteți fie doar începători cu Laravel, fie căutați să vă extindeți cunoștințele, site-ul sau aplicația cu extensii, avem o varietate de lucruri pe care le puteți studia în piața Envato.

Dacă aveți întrebări sau sugestii, nu ezitați să le postați utilizând feed-ul de mai jos!

Cod