使用带有降价的嵌套@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->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 在降价中导出无名图