【问题标题】:Laravel Event: how to fire and pass value to a listener after a controller method is calledLaravel 事件:调用控制器方法后如何触发并将值传递给侦听器
【发布时间】:2013-05-25 06:03:45
【问题描述】:

在这种情况下,我们有 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与任何$manager->manager_title进行比较,如果找到任何匹配项($task->task_title LIKE $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步? (可能找到多个匹配项)

【问题讨论】:

    标签: php laravel laravel-4 eloquent


    【解决方案1】:
    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 );
          }
      });
      

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2021-12-30
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多