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

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

Я написал подписчика Task Event, как это

<?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');
}

}

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

0

Решение

Вам нужно будет объявить объект 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 ');
}
2

Другие решения

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

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector