Laravel Event:如何在控制器方法被调用后触发并传递值给监听器


Laravel Event: how to fire and pass value to a listener after a controller method is called

在本例中,我们有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$manager->manager_title),然后将匹配的$task->task_id$manager->manager_id作为数组传递给另一个事件,
  3. 在一个位于start/global的事件监听器中,它将用从step2接收到的值在assigners表中创建新的记录。事件监听器的编写方式如下:

    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中?)以及应该使用什么参数作为传递($this->task?)的值
  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 );
        }
    });