Передать переменную из контроллера в уведомление в Laravel - PullRequest
0 голосов
/ 26 октября 2019

Мне трудно понять примеры из документации к сценарию, который у меня есть. В моем проекте у меня есть форма заявки, которая заполняется пользователем, после чего администратор обновит эту форму после того, как заявка будет одобрена, отменена и т. Д.

Теперь я хочу уведомить пользователя о том, что его / ее заявка была утверждена. , отменено и т. д.

в моем контроллере:

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' => '/'
        ];
    }
}

Как мне этого добиться? Заранее спасибо!

1 Ответ

2 голосов
/ 26 октября 2019

Получить объект пользователя и вызвать функцию notify () для него. $ this-> notify () не будет работать, потому что $ this не является экземпляром класса User.

$user = User::find($user_id);

$user в функции $user->notify(new AdminResponseToApplication($data)) доступно в классе уведомленийas $notifiable.

Вы можете получить любое значение этого объекта, используя $ notifiable-> name и т. д.

Помните :

AdminResponseToApplication - это класс, и вы можете делать с ним все, что может класс php.

Таким образом, вы можете передать столько переменных, сколько захотите, AdminResponseToApplication классу в конструкторе и делать то, что вы хотите.

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

Как показано выше, я отправляю $ data объект в классе, который доступен в конструкторе.

в классе

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.
    }

}
...