el modo observador laravel

php ¿Cuántos patrones de diseño?

Esto no es un pellizco alma torturada

Hay php Wu patrones de diseño, estoy seguro de que todos los pesos pesados know
tener patrón de estrategia, patrón de la fábrica, Singleton, el modo de registro, el modo de adaptador, el modo de observador
Aquí Insertar imagen Descripción


Los artículos hablan sobre el patrón de observador (Observador)
concepto:
Cuando un cambio de estado del objeto, sus dependientes serán supervisar el cambio, para que la lógica que se ejecutará después del incidente, un comportamiento pasivo. modelo de observador para lograr bajo acoplamiento, el mecanismo no intrusiva para la notificación y actualización

Ventajas:
1. Un modelo abstracto observador establecida acoplado entre el observado y el observador. Se conoce el papel de observador solamente una lista específica de los observadores, cada observador se encuentra con una interfaz abstracta observador específico. El observador no sabe de cualquier observador concreto, sólo se sabe que tienen una interfaz común
2. Como no está estrechamente unida al observador y el observador, de modo que puedan pertenecer a diferentes niveles de abstracción. Si el observador y lo observado son arrojados juntos, entonces el objeto está obligado a través de la abstracción y concretas nivel
3. Modo observador soportes de comunicación de difusión. El observador notificará a todos los observadores registrados

laravel observadores deben ocurrir entonces?

Añadir un oyente
laravel en\ APP \ Providers \ EventServiceProvider.php Carpeta se ha definido detectores de eventos, que primero tiene que definir sus propios oyentes hasta

// 新增事件
'App\Events\EmailLogin' => [
// 发送邮箱验证码
      'App\Listeners\SendEmail',
],

De la siguiente manera:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'App\Events\Event' => [
            'App\Listeners\EventListener',
        ],

        // 新增事件
        'App\Events\EmailLogin' => [
            // 发送邮箱验证码
            'App\Listeners\SendEmail',
        ],

    ];

    /**
     * Register any events for your application.
     *
     * @return void
     */
    public function boot()
    {
        parent::boot();

        //
    }
}

DE

php evento artesano: generar

* Crear un archivo oyente
Aquí Insertar imagen Descripción


Modificar el archivo
emaillogin.php

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

use Admins;

class EmailLogin
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    protected $email_binding;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($email_binding)
    {
        $this->email_binding = $email_binding;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

SendEmail.php

<?php

namespace App\Listeners;

use App\Events\EmailLogin;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

use App\Jobs\SendEmail as send;

class SendEmail
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  EmailLogin  $event
     * @return void
     */
    public function handle(EmailLogin $event)
    {
        $email = Send::dispatch($event);
    }
}

Enrutamiento (evento () de detector de eventos de disparo)

Route::any('/login', function () {
    $email = "*******@qq.com";
    $email_binding = (object) ['email' => $email];

    event(new EmailLogin($email_binding)); //触发监听者事件
});

Prueba de
evento de correo
Empleos \ SendEmail

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Mail;
class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $mail_binding;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($mail_binding)
    {
        $this->mail_binding = $mail_binding;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $mail_binding = $this->mail_binding;

        Mail::send('send',$mail_binding, function ($message) use ($mail_binding) {
            $message->to($mail_binding->email)->subject('登录验证');
        });

    }
}

escenarios patrón de observador:
  1. Para actualizar un estado del objeto, otros objetos necesitan actualizaciones sincronizar y otros objetos número variable dinámicamente
  2. Los objetos sólo necesitan actualizar su notificación a otros objetos sin necesidad de conocer otros objetos detalle

Publicado seis artículos originales · ganado elogios 0 · Vistas 327

Supongo que te gusta

Origin blog.csdn.net/weixin_42217143/article/details/104709717
Recomendado
Clasificación