laravel - 使用带有降价的嵌套@components的Laravel Mail问题
问题描述
我遇到了代码工作的问题,但有时它无法在最外面显示正确的信息@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" alt="{{ $school['logo']['alt'] }}" />
@elseif(empty($school))
<img src="https://[redacted]/public/img/logo.png" class="logo" alt="{{ config('app.name') }}" />
@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" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<!-- THIS IS THE RELEVANT PART -->
{{ $header ?? '' }}
<!-- END OF RELEVANT PART -->
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0">
<table class="inner-body" align="center" width="570" 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
创建布局吗?
编辑:删除剩余代码
解决方案
我已经添加了您在本地提供的邮件文件,以测试导致问题的原因。在不知道您从 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
如果我按照上述步骤中的说明修复您提供的代码片段,则一切正常。如果这能解决您的问题,请告诉我。
推荐阅读
- javascript - 在 HTML 表格中绑定 JSON 数据
- html - 不同的行>按屏幕大小排列的列(引导程序)
- c# - 这个公式在 C# 中的 Excel 场景中存在问题
- linux - DASH 的 nginx 配置
- installation - 创建一个可以在不同目标用户上运行的 deb 文件
- python - argparse:设置默认文本文件
- spring-boot - spring boot thymeleaf - 将下拉选择的值传递为 PathVariable
- javascript - 如何在按钮单击时更改页面内容或部门内容
- c# - 如何为用户提供选项以在 Identity Server 中更新其自己的信息
- python - 如何写一个文件然后同时读取它?