在本例中,我们有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');}
这是我想要达到的目标:
- 将新创建的任务值传递给事件
task.created
, - 比较新任务标题
$task->task_title
与任何$manager->manager_title
,如果找到任何匹配($task->task_title
像$manager->manager_title
),然后将匹配的$task->task_id
和$manager->manager_id
作为数组传递给另一个事件, 在一个位于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中触发事件的位置(在TaskController中?)以及应该使用什么参数作为传递($this->task?)的值
- 如何实现第2步?(可能找到多个匹配项)
-
因为您需要新创建的任务,所以应该在任务创建之后。可能在这条线之后。您可以传递新创建的任务,或者传递task_id并在事件侦听器中获取它。但你必须先抓住任务。
$task = $this->task->create($input); Event::fire('task.created', array($task) );
-
每个循环使用
Event::listen('task.created', function($task) { $managers = getManagersForThisTask($task); foreach($managers as $manager ){ Event::fire('task.created_step2', $task, $manager ); } });