Рубрики
Uncategorized

Экземпляр события / прослушивателя Laravel

Автор оригинала: David Wong.

Представил

В последней статье реализована запись доступа пользователей, которая имеет дефектный дизайн и тесно связана с промежуточным программным обеспечением. Если для последующей модификации требуется не только записать ip, город, но и записать данные в новую таблицу данных или нужна другая статистика, то неразумно постоянно увеличивать и изменять код. В это время для обработки можно использовать событие/прослушиватель Laravel. Код смотрит на GitHub.

Событие/слушатель

События Laravel предоставляют простую реализацию шаблона наблюдателя, которая позволяет подписываться на события в вашем приложении и прослушивать их.

Шаблон наблюдателя иногда называют шаблоном публикации/подписки, который используется для реализации функций публикации/подписки для объектов: как только состояние объекта-субъекта изменяется, связанный объект-наблюдатель получает уведомления и выполняет соответствующие операции.

Выше приведено краткое описание шаблонов события/слушателя и наблюдателя. В сочетании с пониманием этого требования, когда запускается Доступ пользователя Событие, его Наблюдатель Обработка. Наблюдателей может быть несколько, и в этом примере выполняется только складская операция.

Создать событие/прослушиватель

оставайтесь приложение/Провайдеры/EventServiceProvider. php Добавьте событие/прослушиватель в файл следующим образом

/**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        'App\Events\UserBrowse' => [
            'App\Listeners\CreateBrowseLog',
            // Other monitors
        ],
    ];

После добавления выполните событие php artisan:сгенерируйте Соответствующее событие/прослушиватель создается автоматически. Создано отдельно app/Events/UserBrowse.php и app/Listeners/CreateBrowseLog.php Два файла.

Код реализации

Сосредоточьтесь на событиях app/Events/UserBrowse.php Файл, в котором вам необходимо получить данные для последующей обработки, код выглядит следующим образом

    public $ip_addr;
    public $request_url;
    public $city_name;

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

Потом есть монитор. app/Listeners/CreateBrowseLog.php Что нам нужно здесь сделать, так это поместить данные, полученные в ходе события, в библиотеку. Код выглядит следующим образом

/**
     * Handle the event.
     *
     * @param  UserBrowse $event
     * @return void
     */
    public function handle(UserBrowse $event)
    {
        $log = new \App\Models\BrowseLog();

        $log->ip_addr = $event->ip_addr;
        $log->request_url = $event->request_url;
        $log->city_name = $event->city_name;

        $log->save();
    }

События распространения

Последнее, что нужно, – это распространять события и изменять их. app/Http/Middleware/BrowseLog.php Код промежуточного программного обеспечения изменен следующим образом

/**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // Use Event/Listener to Store
        event(new UserBrowse($request->getClientIp(), $request->path(), get_city_by_ip(false, 'null')));
        
        return $next($request);
    }

После теста проблем не возникает.

эпилог

Эта модификация, с точки зрения сенсорики, заключается в передаче складской операции от промежуточного программного обеспечения к слушателю. На самом деле, смысл гораздо больше, чем это. Например, одно и то же событие может быть распространено в разных местах; события добавляют требования, просто нужно добавить слушателя; слушатели также могут использовать очереди и так далее.

Список литературы: События, Модель Наблюдателя.