laravel mailables - >在视图呈现后替换标记

时间:2017-03-31 20:54:17

标签: php wordpress laravel laravel-5 laravel-5.3

以下事项:

我从wordpress数据库中读取帖子。这个想法是帖子充当主人。

E.g。我们有一个带有帖子内容的wordpress帖子:

Hi XX_USERNAME_XX,

nice to meet you.

XX_LARAVEL_CONTENT_XX

thanks for your donation of XX_DONATION_AMOUNT_XX

bye

我现在想要发送正常的laravel mailable,当发送时,替换。现在的问题是,laravel中的观点通常充当主人。

在这种情况下,我希望wordpress发布内容为主,并将laravel视图插入wordpress内容(XX_LARAVEL_CONTENT_XX)。在执行此操作时,请替换其他令牌(XX_DONATION_AMOUNT_XX)。

我可以在渲染laravel mailable之前做些什么吗?例如在将mailable的输出传递给邮件服务之前,我想挂钩我自己的过滤器,从mailable获取输出并将该输出放入wordpress帖子。有什么东西支持这个吗?

1 个答案:

答案 0 :(得分:1)

我不清楚为什么选择以这种方式撰写视图,但为了按照自己的方式实现这一点,您可以使用Mailable类中的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);