Laravel - передача пользовательских данных в электронную почту

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

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class Welcome extends Mailable
{
    use Queueable, SerializesModels;

    public $email_data;

    public function __construct($email_data)
    {
        $this->email_data = $email_data;
    }

    public function build()
    {
        return $this->view('emails.welcome')->with(['email_data' => $this->email_data]);
    }
}

И я отправляю письмо вот так ...

  /* Create Data Array For Email */
        $email_data = array(
            'first_name'=>'John', 
            'last_name'=>'Doe', 
            'email'=>'[email protected]',
            'password'=>'temp',
        );

        /* Send Email */
        Mail::to($user->email)->send(new Welcome($email_data));

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

Вам не нужна эта часть ->with(['email_data' => $this->email_data]), если свойство является общедоступным, вы можете получить к нему доступ в представлении

Maraboc 02.08.2018 17:28

Я пробовал без этой части, но, получив доступ в представлении, я получаю неопределенную переменную: электронная почта. Пробовали $ email и $ email_data-> email

fightstarr20 02.08.2018 17:35

попробуйте вот так $email_data['email']

Maraboc 02.08.2018 17:37

попробуйте с return $this->view('emails.welcome', compact('email_data'))

Julian Mendez 02.08.2018 17:42

@Maraboc - отлично, вот и все!

fightstarr20 02.08.2018 17:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
3
5
3 642
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам не нужна эта часть ->with(['email_data' => $this->email_data]), потому что, если свойство является общедоступным, вы можете получить к нему доступ в представлении.

И вы передаете массив, поэтому вам нужно получить доступ к таким значениям:

$email_data['email'] // ...

Есть два способа передать данные через представление. Во-первых, любые публичные средства защиты, определенные в почтовом классе, автоматически проходят через представление.

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class Welcome extends Mailable
{
    use Queueable, SerializesModels;
    public $firstName;
    public $lastName;
    public $email;
    public $password;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($firstName, $lastName, $email, $password)
    {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
        $this->email = $email;
        $this->password = $password;
    }

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

В режиме просмотра Blade

<div>
    First Name: {{ $firstName }}
    Last Name: {{ $lastName }}
    Email: {{ $email }}
    Password: {{ $password }}
</div>

Для переменных с защищенными и частными свойствами можно передавать данные через представление с помощью метода with

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class Welcome extends Mailable
{
    use Queueable, SerializesModels;

    protected $firstName;
    protected $lastName;
    protected $email;
    protected $password;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($firstName, $lastName, $email, $password)
    {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
        $this->email = $email;
        $this->password = $password;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.orders')->with([
            'first_name'=> $this->firstName, 
            ......
        ]);
    }
}

В режиме просмотра Blade

<div>
    First Name: {{ $firstName }}
    Last Name: {{ $lastName }}
    Email: {{ $email }}
    Password: {{ $password }}
</div>

Вы пробовали этот способ?

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class Welcome extends Mailable
{
    use Queueable, SerializesModels;

    public $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function build()
    {
       return $this->view('emails.welcome')->with('data', $this->data);
    }
}

а затем в вашем контроллере, откуда вы создаете свой массив данных,

$data = [
    'first_name'=>'John', 
    'last_name'=>'Doe', 
    'email'=>'[email protected]',
    'password'=>'temp'
];

\Mail::to($user->email)->send(new Welcome($data));

Убедитесь, что вы добавили

use Mail;
use App\Mail\Welcome;

в вашем контроллере.

Вы можете получить доступ к данным в вашем представлении следующим образом

{{ $data['first_name'] }}
{{ $data['last_name'] }}
{{ $data['email'] }}
{{ $data['password'] }}

ИЛИ ЖЕ

Вы также можете попробовать Сообщения Markdown для этого

Другие вопросы по теме