?
Manchmal haben wir beim einfachen Lesen des Laravel
-Handbuchs einige Zweifel, z. B. hinsichtlich der Autorisierung und Ereignisse unter Systemdiensten sowie der Anwendungsszenarien dieser funktionalen Dienste. Was ist das? Wenn Sie keine bestimmte Entwicklungserfahrung haben, ist es normal, diese Zweifel zu haben, aber wenn wir bei der Arbeit genauer darüber nachdenken, werden wir feststellen, dass wir diese Dienste manchmal tatsächlich gesehen haben vor. Nachfolgend finden Sie ein sehr einfaches Beispiel für Ereignisse und Ereignisüberwachung, und Sie werden es herausfinden.
? In diesem Beispiel geht es um die Implementierung der Anzahl der Artikelaufrufe. Wenn der Benutzer den Artikel ansieht, erhöht sich die Anzahl der Artikelaufrufe um 1. Der Benutzer, der den Artikel ansieht, ist ein Ereignis. Ein Ereignis-Listener ist erforderlich, um entsprechende Vorgänge auszuführen (erhöhen Sie die Anzahl der Artikelansichten um 1). Tatsächlich wird dieser Überwachungsmechanismus über den Beobachtermodus in Laravel
Zuerst müssen wir die Ereignis-Listener-
-Zuordnungsbeziehung app/Providers/
im EventServiceProvider.php
im Verzeichnis wie folgt registrieren:
<code><span>protected</span><span>$listen</span> = <span>[</span><span>'App\Events\BlogView'</span> => <span>[</span><span>'App\Listeners\BlogViewListener'</span><span>,</span><span>],</span><span>];</span></code>
<code>php artisan event:generate</code>
und app/Events
automatisch generiert in den Verzeichnissen app/Listensers
und BlogView.php
. BlogViewListener.php
<code><span><?php</span><span>namespace</span> App\Events<span>;</span><span>use</span> App\Events\Event<span>;</span><span>use</span> App\Post<span>;</span><span>use</span> Illuminate\Queue\SerializesModels<span>;</span><span>use</span> Illuminate\Contracts\Broadcasting\ShouldBroadcast<span>;</span><span>class</span> BlogView <span>extends</span> Event { <span>use</span> SerializesModels<span>;</span><span>/**</span><span> * Create a new event instance.</span><span> *</span><span> * </span><span>@return</span><span> void</span><span> */</span><span>public</span><span>function</span><span>__construct</span><span>(</span>Post <span>$post</span><span>)</span> { <span>$this</span>->post = <span>$post</span><span>;</span> } <span>/**</span><span> * Get the channels the event should be broadcast on.</span><span> *</span><span> * </span><span>@return</span><span> array</span><span> */</span><span>public</span><span>function</span> broadcastOn<span>()</span> { <span>return</span><span>[];</span> } }</span></code>
einfügt und keine enthält redundante Logik. Post
. Der Befehl „event:generate“ importiert automatisch die entsprechende Ereignisklasse und gibt ein Hinweisereignis in die Methode „handle“ ein. Innerhalb der handle
-Methode können Sie jede erforderliche Logik als Reaktion auf das Ereignis ausführen. Unser Code ist wie folgt implementiert: handle
<code><span><?php</span><span>namespace</span> App\Listeners<span>;</span><span>use</span> App\Events\BlogView<span>;</span><span>use</span> Illuminate\Queue\InteractsWithQueue<span>;</span><span>use</span> Illuminate\Contracts\Queue\ShouldQueue<span>;</span><span>use</span> Illuminate\Session\Store<span>;</span><span>class</span> BlogViewListener { <span>protected</span><span>$session</span><span>;</span><span>/**</span><span> * Create the event listener.</span><span> *</span><span> * </span><span>@return</span><span> void</span><span> */</span><span>public</span><span>function</span><span>__construct</span><span>(</span>Store <span>$session</span><span>)</span> { <span>$this</span>->session = <span>$session</span><span>;</span> } <span>/**</span><span> * Handle the event.</span><span> *</span><span> * </span><span>@param</span><span>BlogView</span><span> $event</span><span> * </span><span>@return</span><span> void</span><span> */</span><span>public</span><span>function</span> handle<span>(</span>BlogView <span>$event</span><span>)</span> { <span>$post</span> = <span>$event</span>->post<span>;</span><span>//先进行判断是否已经查看过</span><span>if</span><span>(</span>!<span>$this</span>->hasViewedBlog<span>(</span><span>$post</span><span>))</span> { <span>//保存到数据库</span><span>$post</span>->view_cache = <span>$post</span>->view_cache + <span>1</span><span>;</span><span>$post</span>->save<span>();</span><span>//看过之后将保存到 Session </span><span>$this</span>->storeViewedBlog<span>(</span><span>$post</span><span>);</span> } } <span>protected</span><span>function</span> hasViewedBlog<span>(</span><span>$post</span><span>)</span> { <span>return</span><span>array_key_exists</span><span>(</span><span>$post</span>->id<span>,</span><span>$this</span>->getViewedBlogs<span>());</span> } <span>protected</span><span>function</span> getViewedBlogs<span>()</span> { <span>return</span><span>$this</span>->session->get<span>(</span><span>'viewed_Blogs'</span><span>,</span><span>[]);</span> } <span>protected</span><span>function</span> storeViewedBlog<span>(</span><span>$post</span><span>)</span> { <span>$key</span> = <span>'viewed_Blogs.'</span>.<span>$post</span>->id<span>;</span><span>$this</span>->session->put<span>(</span><span>$key</span><span>,</span><span>time</span><span>());</span> } }</span></code>
bereitgestellte Event
-Methode wie folgt: fire
<code><span><?php</span><span>namespace</span> App\Http\Controllers<span>;</span><span>use</span> Illuminate\Http\Request<span>;</span><span>use</span> App\Post<span>;</span><span>use</span> Illuminate\Support\Facades\Event<span>;</span><span>use</span> App\Http\Requests<span>;</span><span>use</span> App\Events\BlogView<span>;</span><span>use</span> App\Http\Controllers\Controller<span>;</span><span>class</span> BlogController <span>extends</span> Controller { <span>public</span><span>function</span> showPost<span>(</span><span>$slug</span><span>)</span> { <span>$post</span> = Post::whereSlug<span>(</span><span>$slug</span><span>)</span>->firstOrFail<span>();</span> Event::fire<span>(</span><span>new</span> BlogView<span>(</span><span>$post</span><span>));</span><span>return</span> view<span>(</span><span>'home.blog.content'</span><span>)</span>->withPost<span>(</span><span>$post</span><span>);</span> } }</span></code>
Das Obige stellt die einfache Anwendung von Laravel 51-Ereignissen und die Ereignisüberwachung vor, einschließlich Entwicklungserfahrung und Zuordnungsbeziehungen. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.