0

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

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

TaskController.php,我有一个 store 方法来创建新任务

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

这是我想要实现的目标:

  1. 将新创建的任务值传递给事件task.created
  2. 将新任务标题$task->task_title与 any进行比较$manager->manager_title,如果找到任何匹配项 ( $task->task_titleLIKE $manager->manager_title),然后将匹配的$task->task_id$manager->manager_id作为数组传递给另一个事件,
  3. 在位于 start/global 的事件侦听器中,它将使用从 step2 接收的值在分配器表中创建新记录。事件侦听器编写如下:

    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 步?(可能找到多个匹配项)
4

1 回答 1

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 );
        }
    });
    
于 2013-08-08T17:52:38.477 回答