Laravel事件:在调用控制器方法后如何触发并将值传递给侦听器

时间:2013-05-25 06:03:46

标签: php laravel laravel-4 eloquent

在这种情况下,我们有3个表:

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和{ {1}}作为另一个事件的数组,
  3. 在位于start / global的事件监听器中,它将在assigners表中创建具有从step2接收的值的新记录。事件监听器编写如下:

    $manager->manager_id
  4. 我的问题:

    1. 在步骤1中触发事件的位置(在TaskController中?)以及应该将哪个参数用作要传递的值($ this-> task?)
    2. 如何实现第2步? (可能发现了多个比赛)

1 个答案:

答案 0 :(得分: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 );
        }
    });