2013-05-25 2 views
0

В этом случае, у нас есть 3 таблицы:Laravel Событие: как огонь и передать значение слушателю после метода контроллера называется

tasks (task_id, task_title,task_type)
managers (manager_id, manager_title, manager_type)
assigners (task_id, manager_id)

В TaskController.php, у меня есть метод хранения для создания новой задачи

public function store() { 
    $input = Input::all(); 
    $this->task->create($input); 
    return Redirect::route('tasks.index');} 

Вот чего я хочу достичь:

  1. Пропустите вновь созданную стоимость задачи к событию task.created,
  2. Сравните новое название задачи $task->task_title с любым $manager->manager_title, если любые совпадения найдены ($task->task_title LIKE $manager->manager_title), а затем передать совпадающую $task->task_id и $manager->manager_id как массив еще одно событие,
  3. в качестве слушателя событий, расположенный в начале/глобальной, она будет создавать новую запись (ы) в таблице assigners со значениями, полученные от слушателя событий step2.The записывается, как показано ниже:

    Event::listen('task.created',function($param1,$param2){ 
        $new_assigner = new Assigner; 
        $assigner->task_id = $param1; 
        $assigner->manager_id = $param2; 
        $new_assigner->save(); 
    }); 
    

Мои вопросы:

  1. Где огонь событие в шаге 1 (в TaskController?) И какой параметр следует использовать в качестве значения для передачи
  2. (задача $ this->?)
  3. Как достичь шага 2? (Там может быть больше, чем один соответствует найдено)

ответ

2
  1. Поскольку вам нужно вновь созданное задание, оно должно быть после того, как задача была создана. Может быть после этой строки. Вы можете передать вновь созданную задачу, как она есть, или передать task_id и получить ее в прослушивателе событий. Но сначала вы возьмете задачу.

    $task = $this->task->create($input); 
    Event::fire('task.created', array($task)); 
    
  2. Использование для каждого цикла.

    Event::listen('task.created', function($task) 
    { 
        $managers = getManagersForThisTask($task); 
    
        foreach($managers as $manager){ 
         Event::fire('task.created_step2', $task, $manager); 
        } 
    });