0

我有一个 Laravel 应用程序,我在其中使用 Laravel 事件和侦听器。在我的实际用例中,每当用户访问发票详细信息页面时,我都想执行两个事件。其中之一实际上为发票插入了一些相关数据。

但是在显示页面上,该数据未显示(由事件插入)但是数据已成功插入表中

/**
 * Display the specified resource.
 *
 * @param  \App\Invoice  $invoice
 * @return \Illuminate\Http\Response
 */
public function show(Invoice $invoice)
{
    event(new EventA($invoice->user));
    event(new EventB($invoice));
    return view('invoices.'.$invoice->type.'.show', compact('invoice'));
}

我想要的是执行这两个事件并等到他们完成工作然后呈现详细信息页面。

如果有人帮助我知道我们如何从事件执行语句中返回数据,那就更好了

eventAExecuted = event(new EventA($invoice->user)); // expect true
eventBExecuted = event(new EventB($invoice)); // expect true

那么我可以对这些执行布尔表达式

if (eventAExecuted && eventBExecuted) {
    return view('invoices.'.$invoice->type.'.show', compact('invoice'));
}

更新

我从返回以下输出的侦听器返回 true

数组 ( [0] => 1 [1] => 1 ) 数组 ( [0] => 1 )

所以我应用了布尔表达式,但是我通过侦听器插入的数据被插入到表中,但第一次没有在控制器中打印。

eventAExecuted = event(new EventA($invoice->user)); // expect true and insert hasMany realtion data. for eg., invoice->transactions
eventBExecuted = event(new EventB($invoice)); // expect true

if ($eventAExecuted && $eventBExecuted) {
    print_r($invoice->transactions); // getting empty collection however data is inserted successfully.
    die;
    return view('invoices.'.$invoice->type.'.show', compact('invoice'));
}
4

0 回答 0