🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

2回答

2767閲覧

Laravelでテキストをhelperで置換する

kenkbou

総合スコア151

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/03/15 01:13

編集2021/03/15 01:55

Laravelでメール送信機能を実装しています。

その中でLINEにも同時に通知をしたいと言うことになりました。

実装は以下です。

Mail/MailRequest.php

PHP

1<?php 2 3namespace App\Mail; 4 5use App\Services\LineService; 6use App\User; 7use Illuminate\Bus\Queueable; 8use Illuminate\Contracts\Queue\ShouldQueue; 9use Illuminate\Mail\Mailable; 10use Illuminate\Queue\SerializesModels; 11 12class Request extends Mailable 13{ 14 use Queueable, SerializesModels; 15 16 /** 17 * @var User 18 */ 19 private $user; 20 /** 21 * @var LineService 22 */ 23 private $line; 24 25 /** 26 * Create a new message instance. 27 * 28 * @param User $user 29 */ 30 public function __construct(User $user) 31 { 32 $this->user = $user; 33 $this->line = new LineService(); 34 } 35 36 /** 37 * Build the message. 38 * 39 * @return $this 40 */ 41 public function build() 42 { 43 $title = 'XXX'; 44 $text = file_get_contents(resource_path('views/emails/request.blade.php')); 45 $url = route('reservation.index'); 46 47 $this->line->sendMessage( 48 $this->user->line_token, 49 $title . "\n" . $text 50 ); 51 52 return $this 53 ->subject('【ikimasu】' . $title) 54 ->text('emails.request', [ 55 'user' => $this->user, 56 'url' => $url 57 ]); 58 } 59} 60

views/emails/request.blade.php

PHP

1XXX運営事務局です。 2 3リクエストを受け付けました。 4{{ $url }} 5 6宜しくお願いいたします。 7 8 9【お問い合わせ先】 10{{ config('services.support.name') }} 11Email:{{ config('services.support.email') }} 12

$this->line->sendMessage

この部分でtextを渡しているのですが、templateの変数もそのまま挿入されていまいます。(当たり前なのですが。)

そこで file_get_contents をしたテキストに対して適切に表示される処理を行いたいのですが、可能でしょうか。

もしご存知の方がいらっしゃいましたら教えていただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaya754

2021/03/15 01:51 編集

Mail/MailRequest.phpをクラス名なども分かるように全文コピペしてください。
kenkbou

2021/03/15 01:55

失礼しました、コピペしてみました。 ご確認いただけますと幸いです。
guest

回答2

0

php

1$text = view('emails.request')->with([ 2 'user' => $this->user, 3 'url' => $url 4 ])->render();

普通はコントローラーでreturn view();で使うだけだけど
view()->render()で「Bladeとして変換後の文字列」を取得できるのでこれを使えばいい。

投稿2021/03/15 03:21

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Mail/MailRequest.php

php

1 2public function __construct() 3 { 4 //使ってないので消す。 5 } 6 7public function build() 8 { 9 $title = 'XXX'; 10 $url = route('reservation.index'); 11 12 return $this 13 ->subject('【ikimasu】' . $title) 14 ->view('emails.request.blade.php',['url' => $url]); 15 }

LineController.php

php

1use Illuminate\Support\Facades\Mail; 2use Illuminate\Support\Facades\Auth; 3use Illuminate\Support\Facades\View; 4use App\Mail\MailRequest; 5 6public function somethingNeedToMailAndLine() 7{ 8 $user = Auth::user(); 9 10 $title = 'XXX'; 11 $text = View::make('emails.request', [ 12 'user' => $user, 13 'url' => $url 14 ])->render(); 15 16 //メール送信処理 17 Mail::to('送り先アドレス')->send(new MailRequest()); 18 19 //Line送信処理 20 $this->line->sendMessage( 21 $user->line_token, 22 $title . "\n" . $text 23 ); 24 25}

1つ目
View::make('blade名',['必要な変数'])->render();
でbladeで変数展開させた上で、そのhtmlをtextとして取得できます。

2つ目
MailRequest.php のbuild() function は名前の通り、メールを組み立てる機能です。
メール送信は呼び出すところでやりましょう。
Line送信とメール送信が常にセットの場合はLineサービス内に、そうでない場合は別々に呼び出す形がおすすめです。

投稿2021/03/15 02:32

編集2021/03/15 03:11
kaya754

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenkbou

2021/03/15 02:44

ご指摘ありがとうございます。 こちらの実装で進めます。 ただ解決したいと思っている内容とは違うようです、、もしご存知でしたら教えていただけますと幸いです。
kaya754

2021/03/15 02:47

すみません、Line通知用の文章の話でしたね。 読み間違えてました。少々お待ち下さい。
kaya754

2021/03/15 03:17

bladeで変数展開させた上で、そのhtmlをtextとして取得する方法について追記しました。
kenkbou

2021/03/15 03:51

ありがとうございます! 完璧に実装できました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問