Laravel Job не распознает свойство объекта - PullRequest
0 голосов
/ 01 июля 2018

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

Я установил $ request в конструкторе как $this->request = $request;

В методе handle() я делаю это:

\ Log :: info ('job-contact-request', ['request' => $ this-> request]);

журнал выплевывает:

[2018-06-30 14:07:34] local.INFO: request {"request": "[object] (App \ Events \ ContactRequestValidated: {\" request \ ": {\" client_name \ ": \ "Daniel \", \ "client_email \": \ "email@email.com \", \ "client_phone \": \ "1234567891 \", \ "client_text \": \ "blargle carble darble zarble \"}, \ "socket \": null}) "}

Что показывает, что client_email установлен. Но когда я пытаюсь получить доступ к $this->request->client_email, я получаю:

[2018-06-30 14:15:30] local.ERROR: неопределенное свойство: App \ Events \ ContactRequestValidated :: $ client_email {"исключение": "[объект] (ErrorException (код: 0): неопределенное свойство : App \ Events \ ContactRequestValidated :: $ client_email по адресу /var/www/site/laravel/app/Jobs/SendContactRequestEmail.php:36) [StackTrace]

1 Ответ

0 голосов
/ 01 июля 2018

Просто возиться с событиями / слушателями / заданиями Laravel, я должен был исправить некоторые вещи. Наличие журналов по нескольким классам действительно отталкивало меня.

В конструкторе Event мне пришлось использовать метод all() при настройке запроса.

$this->request = $request->all() для правильного доступа к данным по имени свойства.

// Event Constructor
public function __construct( ContactRequest $request )
    {
        $this->request = $request->all();
        // \Log::info( 'Event-Constructor', [ 'contact_request' => $this->request ] );
    }

Событие передает слушателю объект события с набором данных в конструкторе событий как свойство объекта события. Доступ к данным должен осуществляться через объект события.

// Listener
public function handle( ContactRequestValidated $event )
    {
        // \Log::info( 'listener', [ 'contact-event' => $event->request ] );

        dispatch( new SendContactRequestEmail( $event->request ));
    }

Следующая часть Я не совсем уверен, почему это происходит, но в работе запрос был изменен с объекта на массив.

Итак, это код работы:

// Job Constructor
public function __construct( $request )
    {
        $this->request = $request; // Actually an array, not an object
    }

// Job handle
public function handle()
    {
        // \Log::info( 'job-contact-request', [ 'request' => $this->request ] );

        $email = new ConfirmContactRequest( $this->request );

        \Log::info( 'job-contact-request', [ 'email_html' => $email ] );

        // Note request has to be accessed by array notation rather than arrow method
        Mail::to( $this->request['client_email'] )->send( $email );
    }
...