как вызвать данные из laravel для отправки по почте в представлении

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

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

это мой почтовый класс:

public function build()
    {
        $data = array(
            'comapny' => $this->data['company'],
            'file' => $this->data['file'],
            'subject' => $this->data['subject'],
            'email' => $this->data['email']
        );
        foreach($data['email'] as $mail)
        return $this->view('mails.contract')->with('data' , $data['company'])->to($mail)->subject($data['subject'])->attach($data['file'])->withSwiftMeassage(function ($message){
            $swiftMessage = $message->getSwiftMessage();
            $headers = $swiftMessage->getHeaders();
            $headers->addTextHeader('From', 'example - contract <[email protected]>');
            $headers->addTextHeader('Reply-To', '[email protected]');
            $headers->addTextHeader('X-Mailer:', 'PHP/' . phpversion());
        });
    }
}

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <p><?php echo $data ?></p>
</body>
</html>

любая помощь приветствуется


person bartske2002    schedule 18.10.2019    source источник


Ответы (3)


Вам нужно использовать with() с массивами.

Замените ->with('data' , $data['company']) на ->with(['data' => $data['company']])

person Yashari    schedule 18.10.2019
comment
я сделал это, но он все еще не появляется в моей почте, я правильно называю это или это должно быть что-то вроде echo $this->data - person bartske2002; 18.10.2019

Если вы возвращаете представление для рендеринга данных для почтового шаблона (в данном случае я полагаю, что это шаблон mails.contract), есть ли у вас блейд-шаблон, расположенный в resources/mails/ и названный contract.blade.php?

https://laravel.com/docs/5.8/mail#configuring-the-view
https://laravel.com/docs/5.8/mail#view-data

person crescast    schedule 18.10.2019
comment
да, я получаю представление по почте только без переменной - person bartske2002; 18.10.2019
comment
взгляните на эту строку, где вы определяете переменную данных: 'comapny' =› $this-›data['company'], - person crescast; 18.10.2019
comment
я видел это, я исправил это, но это ничего не делает, я все еще не получаю данные, к сожалению - person bartske2002; 18.10.2019

Вы можете передать переменную в почтовый класс, например.

Необходимо создать конструктор и определить публичную функцию.

public $data;

public function __construct( $parameter )
{

    $data = /*Your logic define here and assign to `$this->data`*/
    $this->data = $data;

}

public function build()
{
    return $this->view('mails.contract')->with(['data' => $this->data])
        ->to($mail)->subject($this->data['subject'])
        ->attach($this->data['file'])
        ->withSwiftMeassage(function ($message){
            $swiftMessage = $message->getSwiftMessage();
            $headers = $swiftMessage->getHeaders();
            $headers->addTextHeader('From', 'example - contract <[email protected]>');
            $headers->addTextHeader('Reply-To', '[email protected]');
            $headers->addTextHeader('X-Mailer:', 'PHP/' . phpversion());
        });
}

любое общедоступное свойство, определенное в вашем почтовом классе, будет автоматически доступно для представления.

person Amit Senjaliya    schedule 18.10.2019