使用带有降价的嵌套@components的Laravel Mail问题

Posted

技术标签:

【中文标题】使用带有降价的嵌套@components的Laravel Mail问题【英文标题】:Laravel Mail issue using nested @components with markdown 【发布时间】:2021-12-25 11:21:52 【问题描述】:

我遇到了代码工作的问题,但有时它无法在最外面的@component 中显示正确的信息;它显示的徽标是错误的,就像它正在缓存最外层的布局并在下次调用时使用它,但信息已过时

发送电子邮件时会出现此问题,电子邮件是在队列中运行的。

相关部分代码如下:

1:我要发送的邮件(100% 的时间有效) markdown.blade.php

@component('mail::message')
# @lang('emails.bookingRequestReceipt', ['user' => $association->person->account->first_name, 'school' => $bookingRequest->school->name])

!! html_entity_decode($custom_intro) ?? '' !!

@endcomponent

2:消息组件(100% 有效)

@component('mail::layout')

<!-- THIS IS THE RELEVANT PART -->
-- Header --
@slot('header')
@component('mail::header', ['url' => $school['url'] ?? config('app.url')])
@if(!empty($school['logo']) && !$school['logo']['default'])
<img src=" $school['logo']['url'] " class="logo"  />
@elseif(empty($school))
<img src="https://[redacted]/public/img/logo.png" class="logo"  />
@else
 $school->name 
@endif
@endcomponent
@endslot
<!-- END OF RELEVANT PART -->

-- Body --
 $slot 

@endcomponent

3:布局(失败)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

<table class="wrapper"  cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table class="content"  cellpadding="0" cellspacing="0" role="presentation">

<!-- THIS IS THE RELEVANT PART -->
 $header ?? '' 
<!-- END OF RELEVANT PART -->

<!-- Email Body -->
<tr>
<td class="body"  cellpadding="0" cellspacing="0">
<table class="inner-body" align="center"  cellpadding="0" cellspacing="0" role="presentation">
<!-- Body content -->
<tr>
<td class="content-cell">
 Illuminate\Mail\Markdown::parse($slot) 

</td>
</tr>
</table>
</td>
</tr>

</table>
</td>
</tr>
</table>
</body>
</html>

知道我做错了什么吗?消息中关于$school的信息总是正确的

是因为我没有使用php artisan make:component 来创建布局吗?

编辑:删除剩余代码

【问题讨论】:

【参考方案1】:

我已添加您在本地提供的邮件文件,以测试导致问题的原因。在不知道您从 Mail 类 (return $this-&gt;markdown(...) ??) 返回的方式和内容的情况下,我注意到有关代码示例的一些事情:

    关于错误显示的徽标: 您没有将 $school 变量传递给 message 刀片,因此您的徽标永远无法显示,@elseif(empty($school)) 将始终为真。

    // message.blade.php
    @component('mail::message', ['school' => $school])
    

    您的message.blade.php 包含太多@end 指令,最后两个@ 指令导致刀片出错,请删除这些:

        ...
        -- Body --
         $slot 
    
    @endcomponent
    -- @endslot --  // Causes problems
    -- @endcomponent --  // Causes problems
    

如果我按照上述步骤中的说明修复您提供的代码 sn-ps,则一切正常。 如果这能解决您的问题,请告诉我。

【讨论】:

我尝试了第一个修复,似乎是合理的。时间会证明这是否是正确的解决方案,但我对此寄予厚望。第二部分是我在复制文件时没有正确清除的一些代码(否则没有人会阅读所有内容) 重新阅读您的答案(第 1 点):elseif 实际上是错误的,它会输出一些其他的$school【参考方案2】:

在这种情况下,如果您确定 100% 的所有代码行都是正确的。那么最好尝试重新启动服务器上的队列工作者。

【讨论】:

我每天都这样做,但这不是解决办法:(

以上是关于使用带有降价的嵌套@components的Laravel Mail问题的主要内容,如果未能解决你的问题,请参考以下文章

带有 ROOT 内核的 nbconvert 在降价中导出无名图

如何在电报中使用降价?我想发送带有超链接的消息

无法使用带有样式组件的关键帧设置嵌套动画的样式

Laravel - 在降价邮件中使用 @foreach

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

如何将降价文件加载到反应组件中?