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

在收到的邮件中,&lt;h4&gt;标签会显示为,

<h4>Article</h4>

Markdown 放在@foreach 循环中时不会得到处理。但是放在@foreach循环之外时会被处理。

任何帮助将不胜感激。谢谢。

【问题讨论】:

&lt;h4&gt; 不是降价(是吗?)。我想你需要#### $result['name'] #### @apokryfos:&lt;h4&gt; 标记不会在循环内转换为 HTML 标记。解析@foreach 内容未正确处理。 如果您正在编写 Markdown,那么您可能无法使用 HTML 标签,&lt;h4&gt; 是 HTML 标签而不是 markdown 标签 @apokryfos: #### $result['name'] #### 不起作用它显示为#### Article #### @apokryfos:我理解,&lt;h4&gt; 不是标记标签,而 Laravel 降价模板可以两种方式工作。但不在@foreach 循环内。请参考:github.com/laravel/framework/issues/22290 【参考方案1】:

如laravel documentation中所述:

在编写 Markdown 电子邮件时不要使用过多的缩进。降价 解析器会将缩进的内容呈现为代码块。

问题不在于@foreach中的HTML标签,而是缩进使得解析器呈现如下(我现在使用markdown,&lt;h4&gt;前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问题

php Laravel自定义降价邮件

发送后显示带有降价的 Laravel 通知(MailMessage)

laravel 5.4 在邮件中嵌入图像

Laravel 5.4 更改markdown邮件的主题

如何在使用 Laravel 在控制器中发送邮件之前更改邮件配置?