{"id":28169,"date":"2021-05-21T17:02:00","date_gmt":"2021-05-21T14:02:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28169"},"modified":"2021-10-18T03:43:09","modified_gmt":"2021-10-18T00:43:09","slug":"jak-uzywac-zdarzen-i-nasluchiwaczy-laravel-w-swojej-aplikacji","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-uzywac-zdarzen-i-nasluchiwaczy-laravel-w-swojej-aplikacji\/","title":{"rendered":"Jak u\u017cywa\u0107 zdarze\u0144 i nas\u0142uchiwaczy Laravel w swojej aplikacji?"},"content":{"rendered":"<p>Laravel ma kilka fajnych funkcji w swoim rdzeniu. Niekt\u00f3re z nich to nadawanie, przechowywanie plik\u00f3w, powiadomienia, zdarzenia itp. Ka\u017cda z tych wbudowanych funkcji pomaga programistom w uproszczeniu typowych i skomplikowanych zada\u0144.<\/p>\n<p>W tym artykule om\u00f3wimy zdarzenia Laravel, kt\u00f3re pozwalaj\u0105 nam zarejestrowa\u0107 s\u0142uchacza na konkretne zdarzenia, kt\u00f3re wyst\u0119puj\u0105 w aplikacji. Innymi s\u0142owy, mog\u0119 powiedzie\u0107, \u017ce u\u017cytkownik zarejestrowa\u0142 si\u0119, z\u0142o\u017cy\u0142 zam\u00f3wienie, dodany produkt, wszystko to s\u0105 wydarzenia. A je\u015bli potrzebujesz wyzwoli\u0107 jak\u0105\u015b akcj\u0119 po tych zdarzeniach, mo\u017cesz zarejestrowa\u0107 detektory. Laravel automatycznie dzwoni do s\u0142uchaczy zarejestrowanych na okre\u015blone wydarzenia.<\/p>\n<p>W naszym artykule zrealizuj\u0119 wydarzenie do rejestracji u\u017cytkownika. Gdy u\u017cytkownik zarejestruje si\u0119 w aplikacji, system powinien wys\u0142a\u0107 mu powitaln\u0105 wiadomo\u015b\u0107 e-mail. Tutaj rejestracja u\u017cytkownika jest wydarzeniem, a wys\u0142anie powitalnego e-maila jest s\u0142uchaczem.<\/p>\n<p>Powiedziawszy to, zobaczmy, jak wykorzysta\u0107 zdarzenia i detektory w aplikacji Laravel.<\/p>\n<h3>Rejestrowanie wydarze\u0144 i s\u0142uchaczy w Laravel<\/h3>\n<p>Laravel dostarcza <code>EventServiceProvider<\/code>plik, w kt\u00f3rym musisz zarejestrowa\u0107 swoje zdarzenia i s\u0142uchaczy. W naszym przypadku musimy doda\u0107 zdarzenie i s\u0142uchacz do rejestracji u\u017cytkownika. Wi\u0119c otw\u00f3rz plik <code>EventServiceProvider.php<\/code>i dodaj <code>UserRegistered<\/code>w nim wydarzenie.<\/p>\n<p><strong>app\/Providers\/EventServiceProvider.php<\/strong><\/p>\n<pre><code>...\n...\nclass EventServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* The event listener mappings for the application.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var array\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $listen = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'AppEventsUserRegistered' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'AppListenersSendWelcomeEmail',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0];<\/code><\/pre>\n<p>U\u017cytkownik mo\u017ce doda\u0107 do tej tablicy dowoln\u0105 liczb\u0119 zdarze\u0144 w zale\u017cno\u015bci od wymaga\u0144. Nast\u0119pnie wygeneruj zdarzenia Laravel, uruchamiaj\u0105c polecenie:<\/p>\n<pre><code>php artisan event:generate<\/code><\/pre>\n<p>To polecenie tworzy katalogi \u201eEvents&quot; i \u201eListeners&#8221; w folderze \u201eapp&#8221;. W katalogu 'app\/Events&#8217; znajdziesz plik <code>UserRegistered.php<\/code>. Podobnie <code>SendWelcomeEmail.php<\/code>plik znajduje si\u0119 w katalogu \u201eapp\/Listeners&#8221;.<\/p>\n<h3>Definiowanie zdarze\u0144 i s\u0142uchaczy<\/h3>\n<p>Jeste\u015b teraz gotowy z szablonem dla wydarzenia zarejestrowanego przez u\u017cytkownika. Naszym celem jest wys\u0142anie e-maila powitalnego do u\u017cytkownika po jego zarejestrowaniu. Aby wys\u0142a\u0107 wiadomo\u015b\u0107 e-mail, potrzebujemy obiektu u\u017cytkownika, kt\u00f3ry zawiera informacje o u\u017cytkowniku. W <code>UserRegistered<\/code>przypadku, gdy przekaza\u0142em obiekt u\u017cytkownika do jego konstruktora. Ten obiekt przejdzie nast\u0119pnie do s\u0142uchacza.<\/p>\n<p><strong>app\/Events\/UserRegistered.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppEvents;\n\u00a0\n....\nuse AppUser;\n\u00a0\nclass UserRegistered\n{\n\u00a0\u00a0\u00a0\u00a0use Dispatchable, InteractsWithSockets, SerializesModels;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0public $user;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Create a new event instance.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function __construct(User $user)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;user = $user;\u00a0\u00a0 \n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Kod, kt\u00f3ry wysy\u0142a wiadomo\u015b\u0107 e-mail do u\u017cytkownika, zostanie umieszczony w pliku s\u0142uchacza. Otw\u00f3rz listener <code>SendWelcomeEmail<\/code>i napisz kod w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<p><strong>app\/Listeners\/SendWelcomeEmail.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppListeners;\n\u00a0\n....\nuse Mail;\n\u00a0\nclass SendWelcomeEmail\n{\n\u00a0\u00a0\u00a0\u00a0....\n\u00a0\u00a0\u00a0\u00a0....\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Handle the event.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 UserRegistered\u00a0 $event\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function handle(UserRegistered $event)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data = array('name' =&gt; $event-&gt;user-&gt;name, 'email' =&gt; $event-&gt;user-&gt;email, 'body' =&gt; 'Welcome to our website. Hope you will enjoy our articles');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Mail::send('emails.mail', $data, function($message) use ($data) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$message-&gt;to($data['email'])\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0-&gt;subject('Welcome to our Website');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$message-&gt;from('noreply@artisansweb.net');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>W powy\u017cszym pliku napisa\u0142em kod do wysy\u0142ania e-maili w <code>handle<\/code>metodzie klasy listener. Dzieje si\u0119 tak, poniewa\u017c <code>handle<\/code>metoda otrzymuje wywo\u0142anie po wyst\u0105pieniu zdarzenia rejestracji u\u017cytkownika.<\/p>\n<p>U\u017cy\u0142em r\u00f3wnie\u017c pierwszego parametru jako &#8217;emails.mail&#8217; w metodzie Mail. Oznacza to, \u017ce powiniene\u015b utworzy\u0107 <code>resources\/views\/emails\/mail.blade.php<\/code>plik.<\/p>\n<p><strong>mail.blade.php<\/strong><\/p>\n<pre><code>Hi &lt;strong&gt;{{ $name }}&lt;\/strong&gt;,\n\u00a0\n&lt;p&gt;{{ $body }}&lt;\/p&gt;<\/code><\/pre>\n<h3>Wreszcie zadzwo\u0144 na wydarzenie<\/h3>\n<p>Na tym etapie wszyscy ustawiacie si\u0119 ze swoim wydarzeniem i s\u0142uchaczem. Ostatnim krokiem pozostaje wywo\u0142anie zdarzenia z odpowiedniego miejsca. Za\u0142\u00f3\u017cmy, \u017ce u\u017cywasz \u201eUserController&#8221; do rejestracji u\u017cytkownika. Wi\u0119c z <code>UserController<\/code>, mo\u017cesz zadzwoni\u0107 do wydarzenia w nast\u0119puj\u0105cy spos\u00f3b.<\/p>\n<p><strong>app\/Http\/Controllers\/UserController.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\n....\nuse AppEventsUserRegistered;\nuse AppUser;\n\u00a0\nclass UserController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0.....\n\u00a0\u00a0\u00a0\u00a0.....\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Store a newly created resource in storage.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 IlluminateHttpRequest\u00a0 $request\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return IlluminateHttpResponse\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function store(Request $request)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = User::create([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name' =&gt; $request-&gt;input('name'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email' =&gt; $request-&gt;input('email'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; bcrypt($request-&gt;input('password')),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ call our event here\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0event(new UserRegistered($user));\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $user;\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Teraz, gdy u\u017cytkownik si\u0119 zarejestrowa\u0142, powy\u017cszy kod wywo\u0142uje zdarzenie \u201eUserRegistered&#8221;, kt\u00f3re ostatecznie wywo\u0142uje s\u0142uchacza. S\u0142uchacz nast\u0119pnie wysy\u0142a powitaln\u0105 wiadomo\u015b\u0107 e-mail do u\u017cytkownika.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak u\u017cywa\u0107 zdarze\u0144 i s\u0142uchaczy w swojej aplikacji Laravel. Podziel si\u0119 swoimi przemy\u015bleniami i sugestiami w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-uzywac-laravel-passport-do-uwierzytelniania-rest-api\/\" title=\"Jak u\u017cywa\u0107 Laravel Passport do uwierzytelniania REST API?\" >Jak u\u017cywa\u0107 Laravel Passport do uwierzytelniania REST API?<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/wysylanie-wiadomosci-e-mail-przez-serwer-smtp-gmaila-w-laravel\/\" title=\"Wysy\u0142anie wiadomo\u015bci e-mail przez serwer SMTP Gmaila w Laravel\" >Wysy\u0142anie wiadomo\u015bci e-mail przez serwer SMTP Gmaila w Laravel<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/system-rejestracji-i-logowania-uzytkownika-w-laravel\/\" title=\"System rejestracji i logowania u\u017cytkownika w Laravel\" >System rejestracji i logowania u\u017cytkownika w Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz wdro\u017cy\u0107 zdarzenia i detektory Laravel? W tym artykule om\u00f3wimy, jak rejestrowa\u0107, definiowa\u0107 i u\u017cywa\u0107 zdarze\u0144 i s\u0142uchaczy Laravel.<\/p>\n","protected":false},"author":1,"featured_media":22025,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[501],"tags":[847],"class_list":["post-28169","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28169"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28169\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/22025"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}