2017-03-31 75 views
0

以下东西:laravel mailables - >在视图呈现后替换标记

我从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可邮寄,在发送出来的时候,做的替代品。现在,拉拉维尔的观点通常充当主人。

在这种情况下

不过,我想WordPress的帖子内容是主,并插入laravel视图到WordPress的内容(XX_LARAVEL_CONTENT_XX)。在这样做的同时,替换附加的令牌(XX_DONATION_AMOUNT_XX)。

我如何在laravel mailable呈现之前做些什么?例如在mailable的输出被传递给邮件服务之前,我想挂钩在我自己的过滤器中,从mailable获取输出并将其输出到wordpress文章中。有什么支持吗?

回答

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('[email protected]') 
      ->subject('Hello'); 
    } 
} 

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

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

我选择的理由像这样做是为了让客户端创建WordPress中的所有电子邮件的内容,与所有来与WordPress的编辑器和内置功能的工具,他能够做自己改变以后。如果你有更好的主意,请随时分享 – Toskan