Laravel 5.1 Eloquent事件

4
我正在使用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));
    });
}

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

我该如何将它发送到事件中呢?

你看到了吗?dd($item) 的输出结果是什么? - Basheer Kharoti
@BasheerAhmed dd($items) 返回的是模型对象,而不是我在 $feedback->save($data); 中传递的数据。 - Yasir Pasha
你不能使用“save”方法传递数据... - svrnm
@svrnm 那么,我有没有其他方法可以将数据传递给“created”或“saved”回调函数? - Yasir Pasha
不,不作为函数参数。 - svrnm
显示剩余2条评论
1个回答

2

这个问题肯定有解决办法。我首先想到的是在包含事件的Provider中获取Auth数据。

你需要像这样做:

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。但是从您目前发布的内容中,我无法确定关系,可能需要对代码进行一些调整以适应您的应用程序。如果有其他问题,请随时告诉我!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接