简体   繁体   中英

Laravel 5.1 event fire

I'm firing event and passing object with array like this:

$event = new App\Events\SendMessage;
$event->msg = [ 'sender_id'=>'191', 
                'recepient_id'=>'190',
                'text'=>'some text',
              ];
Event::fire($event);

Is it possible to make this call a bit shorter and fire event in one line like this?

Event::fire(new App\Events\SendMessage([
                        'sender_id'=>'191', 
                        'recepient_id'=>'190',
                        'text'=>'some text',
                    ]));

You would just need to make sure your event constructor is setup to populate that field.

See: http://laravel.com/docs/5.1/events#defining-events

<?php

namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;

class SendMessage extends Event
{
    use SerializesModels;

    public $msg;
    public function __construct($msg)
    {
        $this->msg = $msg;
    }
}

Yep. Just pass the data in the __construct()

class SendMessage extends Event
{
    protected $data;
    public function __construct(array $data)
    {
        $this->data = $data;
    }
}

In your App\\Events\\SendMessage you need to define a constructor method for example:

namespace App\Events;

class SendMessage {

    protected $data = null;

    public function __construct(Array $data)
    {
        $this->data = $data;
    }
}

you can fire event like this in laravel

just put the code into your controller

event(new App\Events\EventClassName());

if your Event has parameters then

event(new App\Events\EventClassName(['first' => 'value','second' => 'value']));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM