Laravel - 在降价邮件中使用 @foreach
Posted
技术标签:
【中文标题】Laravel - 在降价邮件中使用 @foreach【英文标题】:Laravel- use @foreach in markdown mail 【发布时间】:2018-07-10 07:11:59 【问题描述】:我正在尝试在 Markdown 模板中使用 @foreach
循环来发送邮件。
在@foreach 中使用 html 标记时,无法正确呈现
@component('mail::message')
These are the latest contents in our website
@foreach($results as $type => $result)
<h4> $result['name'] </h4>
@endforeach
Thanks,<br>
config('app.name')
@endcomponent
在收到的邮件中,<h4>
标签会显示为,
<h4>Article</h4>
Markdown 放在@foreach
循环中时不会得到处理。但是放在@foreach
循环之外时会被处理。
任何帮助将不胜感激。谢谢。
【问题讨论】:
<h4>
不是降价(是吗?)。我想你需要#### $result['name'] ####
@apokryfos:<h4>
标记不会在循环内转换为 HTML 标记。解析@foreach
内容未正确处理。
如果您正在编写 Markdown,那么您可能无法使用 HTML 标签,<h4>
是 HTML 标签而不是 markdown 标签
@apokryfos: #### $result['name'] ####
不起作用它显示为#### Article ####
@apokryfos:我理解,<h4>
不是标记标签,而 Laravel 降价模板可以两种方式工作。但不在@foreach
循环内。请参考:github.com/laravel/framework/issues/22290
【参考方案1】:
如laravel documentation中所述:
在编写 Markdown 电子邮件时不要使用过多的缩进。降价 解析器会将缩进的内容呈现为代码块。
问题不在于@foreach
中的HTML标签,而是缩进使得解析器呈现如下(我现在使用markdown,<h4>
前4个空格):
<h4>Article</h4>
【讨论】:
【参考方案2】:好问题,同样适用于使用标记而不是 html 的示例。 例如:
@component('mail::message')
# Data received:
@foreach($fields as $name => $value)
** $name : ** $value
@endforeach
@endcomponent
可能导致:
<h1>Data received:</h1>
<pre><code>**voornaam: ** piet
**familienaam: ** hein</code></pre>
虽然有 2 个空格缩进而不是 4 个这样
@component('mail::message')
# Data received:
@foreach($fields as $name => $value)
** $name : ** $value
@endforeach
@endcomponent
同样的输入结果:
<h1>Data received:</h1>
<p><strong>voornaam: </strong> piet</p>
<p><strong>familienaam: </strong> hein</p>
正如@Ben 指向https://laravel.com/docs/5.8/mail#writing-markdown-messages 的意图和解释
在编写 Markdown 电子邮件时不要使用过多的缩进。降价 解析器会将缩进的内容呈现为代码块。
【讨论】:
以上是关于Laravel - 在降价邮件中使用 @foreach的主要内容,如果未能解决你的问题,请参考以下文章
使用带有降价的嵌套@components的Laravel Mail问题