отправка почты возвращает значение null

#php #laravel #email

Вопрос:

При попытке отправить сообщение, на мой взгляд verifyEmail.blade.php $агент равен нулю, а $агент->имя говорит о попытке получить свойство не объекта.

verifyEmail.blade.php

 <body>
   <h2> Welcome to our website{{ $agent->name }} </h2>
   click <a href= "/user/verify/{{ $agent->verifyUser->token }}"> here </a> to verify your email   
</body>
 

Вот как я использую класс Mail. В моей почтовой папке в файле verifyEmail у меня есть функция построения, которая собирает модель $agent.

verifyEmail.php

 class verifyEmail extends Mailable
{
    
    public $agent;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($agent)
    {
        $this->$agent = $agent;
       
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.verifyEmail');
    }
}
 

И в моем контроллере администратора, который выполняет регистрацию для пользователя, выглядит так. Метод отправки передает модель агента в verifyEmail.php что работало в учебнике, который я смотрел. Как я могу сделать модель агента доступной в verifyEmail.blade.php

Административный контроллер

   $agent = new agent($data);
    $agent->name = $data["name"];
    $agent->email = $data["email"];
    $agent->nrc = $data["nrc"];
    $agent->resident = $data["residents"];
    $agent->password = Hash::make($data["password"]);        
    $agent->save();
    
    verifyUser::create(
        [
            'token' => Str::random(60),
            'agent_id' => $agent->id,
        ]
        );
       
        Mail::to($agent->email)->send(new verifyEmail($agent));

    
 

Ответ №1:

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

Внутри файла verifyEmail.php, линия

     $this->$agent = $agent;
 

должно быть

     $this->agent = $agent;
 

Потому что $this->$агент может быть не в состоянии найти переменную уровня класса «агент» и обновить ее значение, указанное в конструкторе, чтобы оно имело значение по умолчанию null, которое отображается впоследствии.

Комментарии:

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

Ответ №2:

Настройка Отправителя

Используя этот from метод, сначала давайте рассмотрим настройку отправителя электронного письма. Или, другими словами, от кого будет отправлено электронное письмо «от». Существует два способа настройки отправителя. Во-первых, вы можете использовать from метод в рамках метода вашего почтового класса build :

 /**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->from('example@example.com')
                ->view('emails.orders.shipped');
}
 

Использование Глобального from Адреса
Однако, если ваше приложение использует один и тот же адрес «от» для всех своих электронных писем, вызов метода » от » в каждом создаваемом вами почтовом классе может стать затруднительным. Вместо этого вы можете указать глобальный адрес «от» в своем configuration file. This address will be used if no other config/mail.php адрес»от» указан в классе, отправляемом по почте:

 'from' => ['address' => 'example@example.com', 'name' => 'App Name'],
 

Кроме того, вы можете определить глобальный адрес «reply_to» в своем config/mail.php файл конфигурации:

 'reply_to' => ['address' => 'example@example.com', 'name' => 'App Name'],
 

Так что вы можете попробовать это В verifyEmail.php Изменить это

  public function build()
    {
        return $this->view('emails.verifyEmail');
    }
 

К этому

 public function build()
        {
            return $this->from('info@domain.com')->view('emails.verifyEmail');
        }
 

Комментарии:

1. Это все еще приводит к той же ошибке. Я думаю, что проблема в том, что сборка не выбирает функцию построения агента, или администратор отправки почты в AdminController не предоставляет конструкцию с моделью агента