如何在Laravel默认邮件中自定义变量?

7

我遵循这个答案,使用以下方式在我的应用程序中发布默认电子邮件模板:

php artisan vendor:publish --tag=laravel-notifications
php artisan vendor:publish --tag=laravel-mail

这个很好用,但显然有一些配置选项,比如:

{{-- Greeting --}}
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level === 'error')
# @lang('Whoops!')
@else
# @lang('Hello!')
@endif
@endif

{{-- Salutation --}}
@if (! empty($salutation))
{{ $salutation }}
@else
@lang('Regards'),<br>{{ config('app.name') }}
@endif

现在我的电子邮件从else部分发送“Hello!”和“Regards”,但显然有一种方法可以使用变量为电子邮件模板设置这些默认值。当发送电子邮件时,如何设置$greeting$salutation变量?


我正在尝试找到存储@lang('Regards')定义的位置。目前我的代码库中没有暴露它。如果有人可以在评论或额外的回答中添加这个信息,那会很有帮助。我通过在@lang('Regards')周围加上双引号并在Google搜索中找到了这个问题。我想在“致以问候”的定义旁边添加类似于@lang('Team')的东西。 - agm1984
但值得注意的是,resources/lang 是一个文件夹位置,人们可以在那里添加任何自定义内容。我还没有学习足够多的知识来说明如何做到这一点。 - agm1984
1个回答

8
你发布的模板是通知邮件的默认模板。 例如,当创建这样的通知时:

php artisan make:notification InvoicePaid --markdown=mail.invoice.paid

会在app/Notifications/InvoicePaid.php中创建一个新的InvoicePaid类。 该类包含一个toMail()方法,其内容如下:

return (new MailMessage)->markdown('mail.invoice.paid');

MailMessage类扩展了SimpleMessage类。 SimpleMessage类有greeting()salutation()方法,可以用于设置问候语或结束语。

例如:

/**
 * Get the mail representation of the notification.
 *
 * @param  mixed  $notifiable
 * @return \Illuminate\Notifications\Messages\MailMessage
 */
public function toMail($notifiable)
{
    return (new MailMessage)
           ->greeting("Your custom greeting")
           ->salutation("Your salutation goes here")
           ->markdown('mail.invoice.paid');
}

1
好的,非常有帮助!我想要覆盖 sendEmailVerificationNotification 模板。所以我猜应该在 app/User.php 中覆盖那个方法,并创建一个带有 markdown 标志的新邮件。我可能会从 Illuminate\Auth\Notifications\VerifyEmail 复制一些功能。 - Connor Leech
1
是的,在您的用户模型中覆盖sendEmailVerificationNotification方法就可以了。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接