laravel event

  1. EventServiceProvider
    namespace App\Providers;
    
    class EventServiceProvider extends ServiceProvider
    {
    
        protected $listen = [
            'App\Events\UserHasRegistered' => [   //修改event
                'App\Listeners\Email@welcome',   //修改listener,Email是類名,welcome是函數名
            ],
        ];
  2. 建立event和listener
    E:\wamp\www\laravel>php artisan  event:generate

  3. 路由
    Route::get('broadcast', function () {
        event(new App\Events\UserHasRegistered('Jeffrey Way'));
        return 'done'; });
  4. 在event中接受name參數
    namespace App\Events;
    
    class UserHasRegistered extends Event
    {
        use SerializesModels;
    
        public $name;
    
        public function __construct($name)
        {
            $this->name = $name;
        }
  5. 在listener中處理
    namespace App\Listeners;
    
    class Email
    {
         public function __construct()
        {
            //
        }
    
        public function handle(UserHasRegistered $event)
        {
            var_dump('The user '.$event->name . ' has registered. Fire off an email.'); //能夠調用到name參數
        }
  6. 在頁面進行測試,主動調用
  7.   
  8. 更進一步,把消息推送到其餘頁面。
  9. app\config\broadcasting 配置,默認爲pusher,在.env設置帳戶,須要先去https://pusher.com/註冊。獲得key與secret
  10. 安裝pusher
    E:\wamp\www\laravel>composer require pusher/pusher-php-server ~2.0

     

  11. 將event接入ShouldBroadcast接口,會去調用pusher
    namespace App\Events;
    
    use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
    
    class UserHasRegistered extends Event implements ShouldBroadcast
    {
        use SerializesModels;
    
        public $name;

     

  12. 在作個前臺接受pusher的界面出來,首先選個路由,而後在view的blade最後加入js代碼
    Route::get('/', function () {
        return view('welcome');   //以welcome接受
    });
        </body>
        <script src="https://js.pusher.com/2.2/pusher.min.js"></script>
        <script>
            var pusher = new Pusher('9cb1b968c4aeeefb7f81', {
              encrypted: true
            });
    
            var channel = pusher.subscribe('myChannel');    //對應到event的broadcastOn的返回值
    
            channel.bind('App\\Events\\UserHasRegistered', function(data) {     //綁定
                console.log(data);
            });
      </script>
    </html>

     

  13. 打開/頁面,刷新broadcast頁面後,/頁面可以收到信息
  14. 來點動態的參數,修改rout
    Route::get('broadcast', function () {
       $name = Request::input('name');
        event(new App\Events\UserHasRegistered($name));
        return 'done';
    });

    訪問broadcast?name=somename,而後就能夠看見/頁面在不刷新的狀況下獲得信息了php

相關文章
相關標籤/搜索