#laravel
Вопрос:
Извините, если это вопрос для новичков.
Я обычно отправлял электронные письма непосредственно через контроллер, вот так:
Mail::to($user)->send(new RegisterConfirmation($user));
Как вы можете видеть, я также передаю $user в электронное письмо, где я могу использовать информацию этого пользователя, например «Здравствуйте {{$user->имя пользователя}}!»
Но теперь вместо этого я хочу ставить электронные письма в очередь, поэтому в моем контроллере теперь у меня есть это:
RegisterConfirmationJob::dispatch($user);
В моей работе у меня есть следующее:
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
$user = $this->user;
Mail::to($user)->send(new RegisterConfirmation($user));
}
Когда я запускаю это, возвращается следующая ошибка:
[2021-07-09 20:33:57] местный.ОШИБКА: Неопределенное свойство: AppJobsRegisterConfirmationJob::$user {«исключение»:»[объект] (Исключение ошибки(код: 0): Неопределенное свойство: AppJobsRegisterConfirmationJob::$пользователь в /home/vagrant/проекты/основной/приложение/Задания/RegisterConfirmationJob.php:37) [трассировка стека]
Почему это происходит?
Редактировать:
Как и было запрошено, вот весь мой класс RegisterConfirmationJob:
<?php
namespace AppJobs;
use AppMailRegisterConfirmation;
use AppUser;
use IlluminateSupportFacadesMail;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class RegisterConfirmationJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
$user = $this->user;
Mail::to($user)->send(new RegisterConfirmation($user));
}
}
Комментарии:
1. вы определили
$user
свойство вRegisterConfirmation
классе?2. можете ли вы опубликовать весь
RegisterConfirmationJob
файл класса?3. @DaviMendesDev хорошо, я отредактировал сообщение
Ответ №1:
Все просто, вы не объявили $user свойством класса, вот в чем смысл ошибки.
Я рекомендую вам объявить его общедоступным, чтобы использовать его в шаблоне blade
Комментарии:
1. Как мне объявить его как класс? Я думал, что это уже произошло, когда я передал «Пользователь $пользователь» в __construct?
2. Спасибо, что это работает на меня. Публичные $ваши возможности после занятий.
Ответ №2:
Да, братан, это не проблема Laravel, это проблема определения класса PHP, ты можешь решить это, объявив $user
свойство вот так:
<?php
namespace AppJobs;
use AppMailRegisterConfirmation;
use AppUser;
use IlluminateSupportFacadesMail;
use IlluminateBusQueueable;
use IlluminateContractsQueueShouldBeUnique;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
use IlluminateQueueInteractsWithQueue;
use IlluminateQueueSerializesModels;
class RegisterConfirmationJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user; // you forgot of put this line
public function __construct(User $user)
{
$this->user = $user;
}
public function handle()
{
$user = $this->user;
Mail::to($user)->send(new RegisterConfirmation($user));
}
}