Подтвердить что ты не робот

Используйте лезвие в лезвии

В моей базе данных я сохраняю тексты, содержащие разметку клинка, например:

Hello {!! $name !!} how are you today.

Я передаю этот текст своему шаблону электронной почты в переменном $text. В письме я использую {!! $text!!}, чтобы получить текст по почте. Однако, когда электронная почта отправляется, она показывает {!! вместо переменной (которая также передается). Как я могу сохранить разметку в моей базе данных и передать ее в мой код, где она должна быть заменена {!! что-то!!} с правой переменной?

Моя почтовая функция.

$email = $order->email;
$name = $order->billingname;

 //The text From the database.
$emailText = Email::findOrFail(5);
$mailtext = $emailText->text;

Mail::send('emails.tracktrace', ['text'=>$mailtext'email' => $email, 'name' => $name],
function ($m) use ($code, $email, $name) {
    $m->from('[email protected]', 'domain');

    $m->to($email, $name)->subject('Track your package!');
});

Обновление

У меня есть обходной путь, когда я делаю:

$mailtext = str_replace('[name]', $name, $mailtext);

таким образом пользователь может использовать [имя], я все равно хотел бы знать, как использовать его только с кликом.

4b9b3361

Ответ 1

У вас не может быть лезвия для скомпилированного PHP-кода без его рендеринга в первую очередь. Вы должны попробовать свой собственный класс рендеринга или вызвать Blade.

public function send()
{
    $emailText = Email::findOrFail(5);
    $name = $order->billingname;
    $mailtext = \Blade::compileString($emailText->text);
    ob_start();
    eval("?> $mailtext <?php");
    $mailtext = ob_get_clean();
    Mail::send('emails.tracktrace', [
            'text' => $mailtext,
            'email' => $email,
            'name' => $name
        ],
        function ($m) use ($code, $email, $name) {
            $m->from('[email protected]', 'domain');
            $m->to($email, $name)->subject('Track your package!');
    });
}

Однако это не безопасно, так как есть eval. [Протестировано в Laravel 5.1]

Также есть некоторые хорошо написанные пакеты для этой конкретной цели, такие как StringBladeCompiler v3

Ответ 2

Я использовал электронную почту, как показано ниже, все динамические переменные, которые нужно заменить, похожи на "{{$ name}}" в шаблоне электронной почты.

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

Вам нужно сохранить текст в шаблоне электронной почты и использовать динамические значения из базы данных.

Если ваш текст для электронной почты является динамическим и поступает из базы данных, вы можете использовать текст вместо шаблона электронной почты в функции и передать массив переменных $data, чтобы заменить их все за один раз.

$data = array('name' => $customer->Name, 'InvoiceID' => $dueinvoice["InvoiceNumber"],'AmountDue' => $dueinvoice["AmountDue"],'DueDate' => $duedate ,'CurrencyCode' => $dueinvoice["CurrencyCode"]); 
\Mail::queue('emails.DueDateNotification',$data, function($message) use($customer)
{
    $message->subject('DueDate Notification');
    $message->to($customer->EmailAddress);
}); 

Еще одна вещь - попытаться использовать функцию "queue" для почты, поскольку она уменьшает нагрузку и добавляет электронную почту в очередь laravel электронной почты и отправляется по очереди

Надеюсь, это поможет вам:)