我正在使用 Laravel 模型事件。我的要求是将附加参数传递给事件。

我正在尝试这样:

$feedback = new Feedback();
    $feedback->user_id = $this->user_id;
    $feedback->feedback = $request->feedback;
    $data = array(
        'message' => $request->feedback,
        'from' => $this->data->user->email,
        'name' => $this->data->user->displayname
    );
    $feedback->save($data);

我的事件是:
public function boot()
{
    Feedback::saved(function ($item) {
        //\Event::fire(new SendEmail($item));
    });
}

但它只在我尝试发送时发送 Model 对象:
$data = array(
        'message' => $request->feedback,
        'from' => $this->data->user->email,
        'name' => $this->data->user->displayname
    );

我如何将其发送到事件?

最佳答案

肯定有办法解决这个问题。第一个想到的是在事件所在的 Auth 中获取 Provider 数据。

你需要做这样的事情:

use Auth; //Assuming this is how you are handling authentication

public function boot()
{
    Feedback::saved(function ($item) {
        $user = Auth::user();
        $data = [
            'message' => $item->feedback,
            'from' => $user->email,
            'name' => $user->displayname
        ];
        \Event::fire(new SendEmail($data));
    });
}

您可能可以改为使用 $item->user->email,而不必为 Auth 烦恼,我只是无法从您迄今为止发布的内容中了解关系。

代码可能需要稍作调整才能在您的应用程序中工作,如果出现其他问题,请告诉我!

10-07 19:49
查看更多