Переменные не отображаются при передаче шаблона из базы данных

У меня есть шаблон базы данных для электронной почты с переменными ant и т. д. Когда я передаю этот шаблон в моем представлении, переменная базы данных не отображается и отображается {{$child_fullname}}, {{$specialist_fullname}} и т. д. вместо данного имени.

Вот моя функция сборки почты:

public function build()
{
    return $this->subject('Pranešimas apie sėkmingą registraciją')
                ->view('email-template')
                ->with([
                    'body'                => EmailTemplate::find(1)->text,
                    'child_fullname'      => $this->child->name . ' ' . $this->child->surname,
                    'specialist_fullname' => $this->card->specialist->name,
                    'date_time'           => $this->visits->workSchedule->work_date . 
                                             ' ' . $this->visits->workSchedule->work_time
                ]);
}

Шаблон лезвия:

<!doctype html>
<html>
    <head>
        <meta name="viewport" content="width=device-width">
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    {!! $body !!}
</html>

Результат: введите здесь описание изображения

Заранее спасибо за помощь!

P.S. Используйте это для отправки электронной почты.


person Sprunkas    schedule 27.11.2018    source источник
comment
Используете ли вы уценку для своей электронной почты?   -  person Unamata Sanatarai    schedule 27.11.2018
comment
Неа. я не использую уценку   -  person Sprunkas    schedule 27.11.2018
comment
Если кто столкнется с такой же проблемой. Исправлено с помощью этого решения: stackoverflow.com/a/33872239/2414450   -  person Sprunkas    schedule 27.11.2018


Ответы (2)


Это не рендеринг, потому что body — это переменная, передаваемая в представление.

Сначала вы должны отобразить body, а затем включить его в свое электронное письмо.

Одним из решений является использование https://github.com/TerrePorter/StringBladeCompiler, это поможет вам начать работу.

Псевдокод для него:

public function build()
{
    return $this->subject('Pranešimas apie sėkmingą registraciją')
        ->view('email-template')->with(
            [
                'body'                  => renderFromString(EmailTemplate::find(1)->text, 
                [
                    'child_fullname'        => $this->child->name . ' ' . $this->child->surname,
                    'specialist_fullname'   => $this->card->specialist->name,
                    'date_time'             => $this->visits->workSchedule->work_date . ' ' . $this->visits->workSchedule->work_time
            ])
        );
}
person Unamata Sanatarai    schedule 27.11.2018
comment
Он не поддерживает версию Laravel 5.7:/. При установке получаю ошибку. wpb/string-blade-compiler 3.6 требует laravel/framework 5.6.* -> удовлетворяется laravel/framework[5.6.x-dev]. - person Sprunkas; 27.11.2018

Попробуйте Blade::compileString()

{!! Blade::compileString($body) !!}
person Leena Patel    schedule 27.11.2018
comment
Не работает. Теперь ничего не показывает вместо переменных. - person Sprunkas; 27.11.2018