Laravel. Передать параметры подписчику на событие

0

Я разрабатываю систему задач, и я хочу отметить, как рассматриваемая задача, и делать другие вещи, когда пользователь запрашивает задачу

Я написал подписчика событий задачи, как это

<?php namespace Athena\Events;

class TaskEventSubscriber {


    public function onCreate($event)
    {
       // Here we can send a lot of emails
    }


    public function onUpdate($event)
    {
        \Log::info('This is some useful information.');
    }

    public function onShow($event)
    {
        \Log::info('The view event is now triggerd ');
    }


    public function subscribe($events)
    {
        $events->listen('user.create', 'Athena\Events\TaskEventSubscriber@onCreate');

        $events->listen('user.update', 'Athena\Events\TaskEventSubscriber@onUpdate');

        $events->listen('task.show', 'Athena\Events\TaskEventSubscriber@onShow');
    }
}

И мой контроллер я запускаю событие следующим образом:

public function show($id)
{
    $canView = $this->canView($id);
    if($canView !== true)
    {
        return $canView;
    }

    $task = $this->task->byId($id);
    // We fire the showed event
    $this->events->fire('task.show', $this->task);
    return View::make('tasks.show')
        ->with('task', $task);
}

Но я не знаю, как я или я должен поймать параметр, который будет использоваться внутри события

Кстати, мой абонент Task Event регистрируется у этого поставщика услуг

class AthenaServiceProvider extends ServiceProvider {

    public function register()
    {
        // A lot of stuffs
    }

    public function boot()
    {
        \Event::subscribe('Athena\Events\UserEventSubscriber');
        \Event::subscribe('Athena\Events\TaskEventSubscriber');
    }

}

Если вам нужна дополнительная информация, просто дайте мне знать, Thnks заранее

Теги:
event-handling
events
laravel-4

2 ответа

0
Лучший ответ

Я не знаю, как себя чувствовать... Я передаю значения, что мне нужно для моего события, есть переменная $ event каждой функции

Примечание: если вам нужно отправить более одного значения, просто поместите их в массив и установите функцию события, чтобы поймать их как параметры

2

Вам нужно будет объявить объект Event таким образом

<?php namespace App\Events;

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

class TriggerShowTask extends Event {

    use SerializesModels;

    public $task;

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

Когда вы запускаете событие с

\Event::fire(TriggerShowTask, $this->task);

Объект $task будет передан событию

Затем вы можете получить к нему доступ в

public function onShow($event)
{
    $event->task; // A Task object
    \Log::info('The view event is now triggerd ');
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню