私はLaravel 5.3を使用して、管理者が電子メールアドレスの確認、パスワードの忘れなどのシステム内で使用されるテンプレート電子メールを作成できるようにしています。テンプレート電子メールは、データベースに記録する。テンプレートを作成したら、彼らは、次のコマンド$emailtemplate
には、以下の入力可能なフィールドを持つモデル $fillable = ['from_name', 'from_email','subject','body','email_type','status'];
Email Builder Laravel
Mail::to($user)->queue(new MailEmailTemplate($emailtemplate, $user));
を使用して、アプリケーション内で使用することができます
電子メールを送信しているユーザー(電子メール本文の上部にある「Dear John」など)にパーソナライズできるようにするには、管理者がフォームに変数を入力できるようにする必要があります。
フォーム本体は、システム管理者が記入すべきかの例: Dear {{$user->first_name}}
Image of the form that admins will use to create the email template
私が午前問題は、電子メールが送信されたときに変数が内に注入されていないですHTMLはクライアントに送信されます。すなわち、上記の例では、受信者は、Dear John
とは対照的に、変数が挿入されていないメールを受信します。 Dear {{$user->first_name}}
私は私のアプリ/路線/ web.phpで次のルートを追加した
ファイル
Route::get('/email_templates/{emailtemplate}/send/{user}', '[email protected]')->name('email_templates.send');
私アプリケーション/ HTTP /コントローラ/ emailTemplatesController.php
...
use App\Mail\MailEmailTemplate;
class EmailTemplatesController extends Controller
{
...
public function send(EmailTemplate $emailtemplate, User $user)
{
Mail::to($user)->queue(new MailEmailTemplate($emailtemplate, $user));
return back();
}
}
私app/Mail/MailEmailTemplate.php Mailable
私はテキストとして、ここでエスケープされていない出力を使用しました、最終的には(受信者に電子メールをdislpayするために使用される)リソース/ビュー/電子メール/ index.blade.phpファイル
{!! $email_template->body !!}
本文フィールドに格納されているのはHTMLです(adminsは、テキストエディタ(phpStorm)でlaravel 'view'として電子メールテンプレートを開発しています)。 )。
$ userオブジェクトの変数を$ emailtemplate-> bodyで指定された変数の代わりに挿入できるようにするには、これをどのように変更できますか?
私は正しい出力が
{!! str_replace('<<$user->first_name>>',$user->first_name, $email_template->body)!!}
を達成することができ、次へリソース/ビュー/電子メール/ index.blade.phpを変更した場合、それがためにstr_replaceを必要とするようしかし、この方法は非効率的です電子メール内で使用される変数に使用されます。注意解析エラーを防ぐには、$ email_template-> bodyに< < >>タグを使用しなければなりませんでした。
更新: は、変数の変数が$ email_template->体内{{}}タグのすべてのインスタンスを検索し、変数の変数として内部に含まれるテキストを処理するために正規表現と組み合わせて使用することができますか?
長い質問をお詫び申し上げます - 私はLaravelには比較的新しいので、皆さんが自分のコード構造を精査できるようにしたいと思っていました。
あなたのお手伝いをお待ちしております。 ヨルダン
を使用してみてくださいあなたは、データベースに保存されますテンプレートに変数を渡したい問題ですか? – Ohgodwhy
電子メールテンプレート本体のデータベース列には、次の情報が含まれている必要があります。
{{$ user-> first_name}}
。 ビューをレンダリングするとき、文字列の{{$ user-> first_name}}部分を$ userオブジェクトのfirst_nameフィールド(ビューに渡しています)に置き換えてください – user3502651