4 votes

LARAVEL : Envoyer du courrier stocké dans la base de données, réalisé à l'aide d'un éditeur WYSIWYG.

J'essaie de mettre en place une fonction de courrier électronique pour mon projet Laravel. J'ai fait toute la mise en place, la classe Mailable, Mailgun, le contrôleur pour envoyer le courrier, etc.

J'ai parcouru la documentation sur le courrier de Laravel, et j'ai essayé de faire ce qui est suggéré, en utilisant un modèle de lame pour mon courrier, etc.

Le problème est que mes clients vont créer leurs propres mails en utilisant un éditeur WYSIWYG, donc je ne peux pas simplement créer les modèles de mails dans blade.php. Je veux récupérer le contenu du courrier dans la base de données, puis l'injecter dans un fichier blade, ce que j'ai réussi à faire.

Mais disons que le contenu du courrier est "Bonjour {{$name}}", lorsque je récupère cette information dans la base de données et que je l'injecte dans le modèle de lame, le courrier envoyé dit effectivement "Bonjour {{$name}}" au lieu de "Bonjour John Doe". J'envoie le $name dans ma classe Mailable, dans la fonction de construction.

class Confirmation extends Mailable
{
  use Queueable, SerializesModels;

  /**
   * Create a new message instance.
   *
   * @return void
   */
   public function __construct(Customer $customer, Mail $mail_content)
   {
     $this->customer = $customer;
     $this->mail_content = $mail_content;
   }

   /**
    * Build the message.
    *
    * @return $this
    */
   public function build()
   {
     return $this->from('noreply@example.com')
                 ->with([
                     'name' => $this->customer->name,
                     'content' => $this->mail_content->content,
                 ])
                 ->subject('Confirmation')
                 ->view('emails.test');
   }
}

Ainsi, si le contenu était "Bonjour {{$name}}", je voudrais que le nom de la fonction de construction remplace {{$name}} dans le contenu. Mais comme il provient de la base de données, il n'est apparemment pas traité de la même manière que si j'avais simplement écrit "Hello {{$name}}" dans le fichier de vue.

Mon modèle de lame ressemble à ceci :

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Confirmation mail</title>
</head>
<body>
  {!! $content !!}
</body>

Des suggestions ? J'espère que cela aura un sens pour quelqu'un d'autre :D

1voto

Matt Jameson Points 484

Pourriez-vous simplement utiliser un str_replace() avant la sortie ? http://php.net/manual/en/function.str-replace.php

public function replaceContent() {

    $this->mail_content->content = str_replace('{{$name}}', $this->customer->name, $this->mail_content->content)

}

et l'appeler dans votre fonction de construction

public function build(){

    $this->replaceContent();

    return $this->from('noreply@example.com')
        ->with([
            'name' => $this->customer->name,
            'content' => $this->mail_content->content,
        ])
        ->subject('Confirmation')
        ->view('emails.test');
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X