【问题标题】:Event listener in laravel 5.4laravel 5.4 中的事件监听器
【发布时间】:2017-10-25 18:35:56
【问题描述】:

我正在使用 laravel 5.4 来创建我的项目,我使用身份验证控制器进行登录和注册,当我提到我想到创建事件的想法时,我需要的是获取用户的最后登录时间并将其存储在数据库中听众,我做到了..

login event handling in laravel 5

这是我的

EventServiceProvider.php

   <?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\SomeEvent' => [
                'App\Listeners\EventListener',
            ],
             'Illuminate\Auth\Events\Login' => [
                'App\Listeners\AuthLoginListener',
            ],
        ];

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


        }
    }
I defined listener as AuthLoginListner and my 

> AuthLoginListner.php

<?php

namespace App\Listeners;
use Carbon\Carbon;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;
use Illuminate\Auth\Events\Login;
class AuthLoginListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  auth.login  $event
     * @return void
     */
    public function handle(Login $event)
    {
        return "yes";
    }
}

在这里,我现在只返回一个文本,我怀疑它是如何工作的,我在哪里得到这个是消息,它没有向我显示任何错误现在怀疑它的工作是否正确,如果是的话,我在哪里得到这个消息..请任何有人帮帮我,我只是对此感到困惑......

【问题讨论】:

    标签: php laravel laravel-5.4


    【解决方案1】:

    这是我实现它的方法。

    我在这里创建了一个新的监听器App/Listeners/LogSuccessfullLogin.php

    namespace App\Listeners;
    
    use Illuminate\Auth\Events\Login;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use \Carbon\Carbon;
    
    class LogSuccessfulLogin
    {
        /**
        * Create the event listener.
        *
        * @return void
        */
        public function __construct()
        {
            //
        }
    
        /**
        * Handle the event.
        *
        * @param  Login  $event
        * @return void
        */
        public function handle(Login $event)
        {
            $event->user->last_login = Carbon::now();
            $event->user->save();
        }
    }
    

    然后在EventServiceProvider 中,我观察到Illuminate\Auth\Events\Login 事件是这样的:

    <?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 = [
            'Illuminate\Auth\Events\Login' => [
                'App\Listeners\LogSuccessfulLogin',
            ]
        ];
    
        /**
        * Register any events for your application.
        *
        * @return void
        */
        public function boot()
        {
            parent::boot();
    
            //
        }
    }
    

    所以每次用户登录时,它都会将时间戳保存在users 表的last_login 字段中。

    希望这会有所帮助!

    【讨论】:

    • 所以我想在我的用户表中创建一列last_login
    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多