Laravel 5.4 有一个新功能。您可以在邮件模板中使用 Markdown。
这是我的邮件边栏选项卡模板:
# Message for you!
Hello {{ $user->name }},
@foreach($messages as $message)
{{ $message->text }}
@endforeach
Greetings
我的问题是:$message->text
的第一个字符可以是#(数字符号或哈希(,因此字符串被解析为标题...
更新:
您可以使用 \ (https://meta.stackexchange.com/a/198231( 转义所有降价字符
我试图用这段代码转义所有字符:
$text = str_replace(
['\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!'],
['\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!'],
$text
);
但我认为这不是推荐的方式...
如何转义字符串?
问候
我认为不可能逃脱刀片中的第一个字符。
解决此问题的一种可能方法是将"#"更改为带有 html 编号的#
在控制器中,您可以检查消息是否以 # 开头并将其替换为 #
function replaceFirstChar($message)
{
if ($message[0] == "#") {
$new_message = '#' . substr($message, 1);
return $new_message;
} else {
return $message;
}
}
我认为这应该有效。
更新
addcslashes($str , ' `*[]()#+-.!');
这应该可以解决问题。(可能需要添加一些额外的字符(
好的,我找到了我的解决方案!您必须创建一个新的邮件组件...
首先,您必须使用 php artisan vendor:publish --tag=laravel-mail
(https://laravel.com/docs/5.4/mail#customizing-the-components( 从 laravel 发布电子邮件组件。现在,您的resources/views
中有一个vendor
文件夹。
进入resources/views/mail/html
并创建一个新的.blade.php
文件。我的文件如下所示:
<table class="notification" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="notification-meta">
{{ $time }}
</td>
</tr>
<tr>
<td class="notification-content">
{{ $slot }}
</td>
</tr>
</table>
您必须在 resources/views/markdown/html
下为纯文本邮件创建相同的文件。
如果您查看resources/views/mail/html/footer.blade.php
您可以在模板中看到以下功能:
{{ IlluminateMailMarkdown::parse($slot) }}
此函数将标记解析为 html。我不在我的模板中使用该功能。
现在我可以在邮件中使用我的组件,例如:
# Message for you!
Hello {{ $user->name }},
@component('mail::notification', ['time' => '06.02.2017' ])
{{ $text }}
@endcomponent
Greetings
并且$text
不会从 markdown 解析为 html :)