Heim > Backend-Entwicklung > PHP-Tutorial > Einfache Anwendung von Laravel 51-Ereignissen und Event-Listening

Einfache Anwendung von Laravel 51-Ereignissen und Event-Listening

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-07-29 09:11:22
Original
961 Leute haben es durchsucht

?
Laravel 51 事件、事件监听的简单应用

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

Ereignisse registrieren implementiert und Zuhörer

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>
Nach dem Login kopieren
und dann das Projektstammverzeichnis. Führen Sie den folgenden Befehl im Verzeichnis

<code>php artisan event:generate</code>
Nach dem Login kopieren
aus. Nachdem der Befehl abgeschlossen ist, werden die Dateien

und app/Events automatisch generiert in den Verzeichnissen app/Listensers und BlogView.php. BlogViewListener.php

Ereignisse definieren

<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>
Nach dem Login kopieren
Wenn Sie dies sehen, werden Sie tatsächlich feststellen, dass die Ereignisklasse nur eine Instanz von

einfügt und keine enthält redundante Logik. Post

Listener definieren

Ereignis-Listener empfangen Ereignisinstanzen in der Methode

. 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>
Nach dem Login kopieren
Einige Logik wurde auch in den Kommentaren erläutert .

Trigger-Ereignis

Nachdem das Ereignis und die Ereignisüberwachung abgeschlossen sind, müssen wir die gesamte Überwachung implementieren, dh den Benutzer dazu veranlassen, das Artikelereignis zu öffnen. Hier verwenden wir die von

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>
Nach dem Login kopieren
Öffnen Sie nun die Seite und stellen Sie fest, dass der „view_cache“ in der Datenbank normalerweise um 1 erhöht wurde das Ganze ist fertig.

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.

Verwandte Etiketten:
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage