在 Laravel 中将变量从控制器传递到通知

Pass variable from controller to notification in Laravel

我发现很难理解文档中的示例和我遇到的场景。在我的项目中,我有一个由用户填写的申请表,一旦申请被批准、取消等,管理员将更新该表格。

现在我想通知用户 her/his 申请已被批准、取消等

在我的控制器中:

public function update(Request $request, $id)
{
    $this->validate($request, [
        'status' => 'required'
    ]);
    $requestData = $request->all();

    $loanapplication = LoanApplication::findOrFail($id);

    $loanapplication->update([
        "status"        => $request->status,
        "admin_notes"   => $request->admin_notes,
        "date_approval" => $request->date_approved
    ]);    

    if($request->notifyBorrower = 'on') {

        $user_id = $loanapplication->user_id;
        $status = $request->status;
        $this->notify(new AdminResponseToApplication($user_id));   
    }

    return redirect()->back()->with('flash_message', 'LoanApplication updated!');
}

在我的 AdminResponseToApplication.php 我喜欢实现这个

<?php
namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class AdminResponseToApplication extends Notification implements ShouldQueue
{
    use Queueable;  
    public function __construct()
    {
        //
    }

    public function via($notifiable)
    {
        return ['mail','database'];
    }

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line(.$user->nameHere. 'your application has been '.$statusHere.'.')
            ->action('check it out', url('/'))
            ->subject('Regarding with your loan application')
            ->line('This is system generated. Do not reply here.');
    }

    public function toDatabase($notifiable)
    {
        return [
            'user_id' => $user->nameHere,
            'status' => $statusHere,
            'title' => .$user->nameHere. 'your application has been '.$statusHere.'.',
            'url' => '/'
        ];
    }
}

我怎样才能做到这一点?提前致谢!

获取用户对象并在其上调用函数 notify()。 $this->notify() 将不起作用,因为 $this 不是 User class.

的实例
$user = User::find($user_id);

$user $user->notify(new AdminResponseToApplication($data)) 函数在通知 class 中可用 $notifiable.

您可以使用 $notifiable->name 等获取该对象的任何值

记得:

AdminResponseToApplication 是一个 class,您可以用它做任何 php class 可以做的事情。

因此,您可以在构造函数中向 AdminResponseToApplication class 传递任意数量的变量,然后执行您想要的操作。

$user->notify(new AdminResponseToApplication($data))

如上所示,我将 $data 对象发送到构造函数中可用的 class。

在class

class AdminResponseToApplication extends notification implements ShouldQueue{
    use Queueable;

    public $myData;
    public function __construct($data)
    {
        $this->myData = $data;  //now you have a $data copied to $this->myData which
        // you can call it using $this->myData in any function of this class.
    }

}