In dit artikel gaan we het meldingssysteem in het Laravel-webraamwerk verkennen. Met het meldingssysteem in Laravel kunt u meldingen verzenden naar gebruikers via verschillende kanalen. Vandaag bespreken we hoe u meldingen via het e-mailkanaal kunt verzenden.
Tijdens de ontwikkeling van toepassingen moet u gebruikers vaak op de hoogte stellen van verschillende statuswijzigingen. Het kan zijn dat u e-mailmeldingen verzendt wanneer de bestelstatus is gewijzigd of een sms verzendt over hun aanmeldingsactiviteit voor veiligheidsdoeleinden. We hebben het in het bijzonder over korte berichten en geven alleen inzicht in de statusveranderingen.
Laravel biedt al een ingebouwde functie waarmee we iets vergelijkbaars kunnen bereiken. Sterker nog, het maakt het verzenden van kennisgevingen aan gebruikers een fluitje van een cent en een leuke ervaring!
Het mooie van die aanpak is dat je kunt kiezen uit verschillende kanalen waar meldingen naartoe worden gestuurd. Laten we snel de verschillende meldingskanalen bekijken die door Laravel worden ondersteund.
Onder verschillende meldingskanalen gebruiken we het e-mailkanaal in onze voorbeeldgebruikscase die we in de loop van deze zelfstudie gaan ontwikkelen.
In feite is het een vrij eenvoudige use-case die gebruikers van onze applicatie toestaat om berichten naar elke gebruiker te sturen. Wanneer gebruikers een nieuw bericht in hun inbox ontvangen, zullen we hen over dit evenement informeren door een e-mail te sturen naar hen. Natuurlijk doen we dat met behulp van de meldingsfunctie van Laravel!
Zoals we eerder hebben besproken, gaan we een applicatie opzetten waarmee gebruikers van onze applicatie berichten naar elkaar kunnen verzenden. Aan de andere kant zullen we gebruikers op de hoogte stellen wanneer ze een nieuw bericht ontvangen van andere gebruikers via e-mail.
In dit gedeelte maken we de benodigde bestanden die nodig zijn om de use-case te implementeren waarnaar we op zoek zijn.
Om te beginnen, laten we het maken Bericht
model dat berichten bevat die door gebruikers aan elkaar zijn verzonden.
$ php artisan make: model Message --migration
We moeten ook een paar velden toevoegen zoals naar
, van
en bericht
naar de berichten
tafel. Dus laten we het migratiebestand wijzigen voordat het wordt uitgevoerd trekken
commando.
verhogingen ( 'id'); $ table-> integer ('from', FALSE, TRUE); $ table-> integer ('to', FALSE, TRUE); $ Tafel-> text ( 'e-mail'); $ Tafel-> timestamps (); ); / ** * Keer de migraties terug. * * @return void * / public function down () Schema :: dropIfExists ('messages');
Laten we nu de opdracht migreren uitvoeren waarmee de berichtentabel in de database wordt gemaakt.
$ php artisan migreren
Dat zou het moeten maken berichten
tabel in de database.
Zorg er ook voor dat u het standaard Laravel-authenticatiesysteem in de eerste plaats hebt ingeschakeld, zodat functies zoals registratie en login uit de doos werken. Als u niet zeker weet hoe u dat moet doen, geeft de documentatie van Laravel u daar snel inzicht in.
Aangezien elke melding in Laravel wordt vertegenwoordigd door een afzonderlijke klasse, moeten we een aangepaste meldingsklasse maken die zal worden gebruikt om gebruikers op de hoogte te stellen. Laten we de volgende artisan-opdracht gebruiken om een aangepaste meldingsklasse te maken: NewMessage.
$ php artisan make: notificatie NewMessage
Dat zou het moeten maken app / Meldingen / NewMessage.php
klasse, dus laten we de inhoud van dat bestand vervangen door de volgende inhoud.
fromUser = $ gebruiker; / ** * Ontvang de afleveringskanalen van de melding. * * @param mixed $ notifiable * @return array * / public function via ($ notifiable) return ['mail']; / ** * Ontvang de e-mailrepresentatie van de melding. * * @param mixed $ notifiable * @return \ Illuminate \ Notifications \ Messages \ MailMessage * / public function toMail ($ notifiable) $ subject = sprintf ('% s: u hebt een nieuw bericht van% s!' , config ('app.name'), $ this-> fromUser-> naam); $ greeting = sprintf ('Hello% s!', $ notifiable-> name); return (nieuwe MailMessage) -> onderwerp ($ onderwerp) -> begroeting ($ begroeting) -> aanhef ('Yours Faithfully') -> line ('De inleiding tot de melding') -> actie ('Meldingsactie', url ('/')) -> regel ('Bedankt voor het gebruik van onze applicatie!'); / ** * Krijg de array-weergave van de melding. * * @param gemengd $ meldingsplichtig * @return array * / openbare functie toArray ($ meldingsplichtig) retour [//];
Aangezien we het e-mailkanaal gebruiken om meldingen naar gebruikers te verzenden, is het via
methode is overeenkomstig geconfigureerd. Dit is dus de methode waarmee u het kanaaltype van een melding kunt configureren.
Vervolgens is er de mailen
methode waarmee u verschillende e-mailparameters kunt configureren. In feite is de mailen
methode moet het exemplaar van retourneren \ Illuminate \ Notificaties \ Berichten \ MailMessage
, en die klasse biedt nuttige methoden waarmee u e-mailparameters kunt configureren.
Onder verschillende methoden, de lijn
methode kunt u een enkele regel in een bericht toevoegen. Aan de andere kant is er de actie
methode waarmee u een call-to-action-knop in een bericht kunt toevoegen.
Op deze manier kunt u een bericht opmaken dat naar gebruikers wordt verzonden. Dus dat is hoe je de kennisgevingsklasse zou moeten configureren terwijl je het e-mailkanaal gebruikt om meldingen te verzenden.
Aan het einde moet u ervoor zorgen dat u de noodzakelijke methoden implementeert volgens het kanaaltype dat is geconfigureerd in de via
methode. Als u bijvoorbeeld het databasekanaal gebruikt dat meldingen in een database opslaat, hoeft u de server niet te configureren mailen
methode; in plaats daarvan zou u het moeten implementeren toArray
methode, die de gegevens opmaakt die in een database moeten worden opgeslagen.
In de vorige sectie hebben we een meldingsklasse gemaakt die gereed is voor het verzenden van meldingen. In deze sectie zullen we bestanden maken die demonstreren hoe je meldingen kunt verzenden met behulp van de Nieuw bericht
kennisgevingsklasse.
Laten we een controllerbestand maken op app / Http / Controllers / NotificationController.php
met de volgende inhoud.
middleware (auth); public function index () // gebruiker 2 stuurt een bericht naar gebruiker 1 $ message = new Message; $ message-> setAttribute ('from', 2); $ message-> setAttribute ('to', 1); $ message-> setAttribute ('message', 'Demo message from user 2 to user 1.'); $ Bericht-> save (); $ fromUser = Gebruiker: find (2); $ toUser = Gebruiker: find (1); // bericht verzenden via het "gebruiker" -model, wanneer de gebruiker een nieuw bericht ontvangt $ toUser-> notify (new NewMessage ($ fromUser)); // bericht verzenden met behulp van de "Melding" -voorgevel Melding :: send ($ toUser, new NewMessage ($ fromUser));
Natuurlijk moet u een gekoppelde route toevoegen in de routes / web.php
het dossier.
Route :: get ('notify / index', 'NotificationController @ index');
Er zijn twee manieren waarop Laravel u toestaat om meldingen te verzenden: door gebruik te maken van de meldingsplichtige entiteit of de meldingsvoorgevel.
Als de klasse van het entiteitsmodel de Verlichten \ Meldingen \ Aangifteplichtige
eigenschap, dan zou je het kunnen noemen verwittigen
methode op dat model. De App \ User
klasse implementeert de aangifteplichtige
eigenschap en dus wordt het de te melden entiteit. Aan de andere kant kunt u ook de Verlichten \ Support \ Gevels \ Notification
Facade om meldingen naar gebruikers te verzenden.
Laten we door de inhoudsopgave
methode van de controller.
In ons geval gaan we gebruikers op de hoogte stellen wanneer ze een nieuw bericht ontvangen. Dus we hebben geprobeerd om dat gedrag na te bootsen in de inhoudsopgave
methode in de eerste plaats.
Vervolgens hebben we de geadresseerde op de hoogte gesteld van een nieuw bericht met behulp van de verwittigen
methode op de $ TOUSER
object, omdat het de aangifteplicht entiteit.
$ toUser-> notify (new NewMessage ($ fromUser));
Je hebt misschien gemerkt dat we ook de $ fromUser
object in het eerste argument van de __construct
methode, omdat we de van gebruikersnaam in een bericht.
Aan de andere kant, als u het wilt nabootsen met behulp van de Kennisgeving
gevel, het is vrij eenvoudig om dit te doen met behulp van het volgende fragment.
Melding :: send ($ toUser, new NewMessage ($ fromUser));
Zoals u kunt zien, hebben we de sturen
methode van de Notification-façade om een kennisgeving aan een gebruiker te verzenden.
Ga je gang en open de URL http: // your-laravel-site-domain / notify / index in je browser. Als u nog niet bent ingelogd, wordt u doorgestuurd naar het inlogscherm. Nadat je bent ingelogd, ontvang je een e-mail met een melding op het e-mailadres dat is gekoppeld aan de gebruiker 1
.
U vraagt zich misschien af hoe het meldingssysteem de naar
adres als we het nog niet hebben geconfigureerd. In dat geval probeert het meldingssysteem de e-mail
eigenschap in het aan te melden object. En de App \ User
objectklasse heeft die eigenschap al, omdat we het standaard Laravel-authenticatiesysteem gebruiken.
Als u echter dit gedrag wilt overschrijven en u een andere eigenschap dan e-mail wilt gebruiken, hoeft u alleen de volgende methode in uw kennisgevingsklasse te definiëren.
public function routeNotificationForMail () return $ this-> email_address;
Nu moet het meldingssysteem zoeken naar de e-mailadres
eigenschap in plaats van de e-mail
eigenschap om het te halen naar
adres.
En zo gebruik je het meldingssysteem in Laravel. Dat brengt ons ook aan het einde van dit artikel!
Wat we vandaag hebben meegemaakt, is een van de nuttige, maar toch minst besproken functies in Laravel-meldingen. Hiermee kunt u meldingen verzenden naar gebruikers via verschillende kanalen.
Na een korte introductie hebben we een voorbeeld in de praktijk geïmplementeerd dat aantoonde hoe meldingen via het e-mailkanaal konden worden verzonden. In feite is het echt handig in het geval van het verzenden van korte berichten over statuswijzigingen in uw applicatie.
Voor degenen onder u die net zijn begonnen met Laravel of die op zoek zijn om uw kennis, site of applicatie uit te breiden met uitbreidingen, hebben we een aantal dingen die u kunt bestuderen in Envato Market.
Als u vragen of suggesties heeft, aarzel dan niet om ze te plaatsen met behulp van de onderstaande feed!