laravel mailables -> 在呈现视图后替换令牌

laravel mailables -> replace tokens after view rendered

以下内容:

我从 wordpress 数据库中读取了 posts。这个想法是 post 充当主人。

例如我们有一个 wordpress post,内容 post:

Hi XX_USERNAME_XX,

nice to meet you.

XX_LARAVEL_CONTENT_XX

thanks for your donation of XX_DONATION_AMOUNT_XX

bye

我现在想发送一个正常的 laravel 可邮寄邮件,在发送时进行替换。现在问题是 laravel 中的视图通常充当主视图。

虽然在这种情况下,我希望 wordpress post 内容成为主内容,并将 laravel 视图插入到 wordpress 内容 (XX_LARAVEL_CONTENT_XX) 中。在这样做的同时,替换其他标记 (XX_DONATION_AMOUNT_XX)。

在呈现 laravel 可邮寄对象之前,我该怎么做?例如在将 mailable 的输出传递到邮件服务之前,我想挂钩我自己的过滤器,从 mailable 中获取输出并将该输出放入 wordpress post。有什么支持这个的吗?

我不太清楚你为什么选择以这种方式撰写你的观点,但为了以你的方式实现这一点,你可以在 Mailable class 中使用 callbacks 变量。他们将 called upon the message 在您的视图

完成后
Class MyMail extends Mailable
{
    use Queueable, SerializesModels;
    public $master;
    publiс $placeholder = 'XX_LARAVEL_CONTENT_XX';

    public function __construct($master)
    {
        $this->master = $master; // 'BEFORE + XX_LARAVEL_CONTENT_XX + AFTER';
    }

    public function build()
    {
        $this->callbacks[] = function ($message) {
            $oldBody = $message->getBody();
            $newBody = str_replace($this->placeholder, $oldBody, $this->master);
            $message->setBody($newBody);
        };

        return $this->view('my-laravel-mail-view') // your normal message setup
            ->to('test@example.com')
            ->subject('Hello');
    }
}

如果要替换多个变量,请记住 str_replace 支持数组作为搜索和替换:

str_replace(['aa', 'bb'], ['AA', 'BB'], $subject);