いつもお世話になっております。
現在、ショッピング系のサイトを独学でつくっており受注管理画面を構築しております。
その画面において発送完了メールや入金依頼メールを複数のレコードに対して個々の注文内容の乗せた内容で一括で送信したいと思っております。
※具体的には下記の流れを行いたいです。
受注管理画面で送りたいメールのタイトルをプルダウンで選ぶ
※共通する文章はDBでメールテンプレートテーブルとして保持されている
↓
各注文レコード横にチェックボックスがある。メールを送りたいレコードにチェックを付ける
↓
「メールを確認する」ボタンを押下
↓
チェックを付けた複数のレコードの中から適当な1レコードでメール本文の確認画面を表示
↓
「送信するボタンを押下」
↓
送信完了画面へ
チェックが一つだけ付けたときの送信は正常にできたのですが、複数のレコードにチェックが入っていた時の一括送信が分からず知恵をお貸しください。
以下、コードです。。。
php
1//受注管理画面view 2<div>受注一覧</div> 3 <form action="/mailConfirm" method="post" id="sentMail"> 4 @csrf 5 <select form="sentMail"> 6 @foreach($mailTemplates as $mailTemplate) 7 <option value="{{ $mailTemplate->id }}">{{ $mailTemplate->name }}</option> 8 @endforeach 9 </select> 10 <button type="submit">メールを送る</button> 11<table> 12 <tr> 13 <th>選択</th> 14 <th>注文No</th> 15 <th>注文者氏名</th> 16 </tr> 17 @foreach ($orders as $order) 18 <tr> 19 <th> 20 <input type="checkbox" 21 name="check[]" 22 id="" 23 value="{{$order->id}}"> 24 </th> 25 <th>{{ $order->order_no }}</th> 26 <th> 27 <div>{{ $order->name }}</div> 28 </th> 29 </tr> 30 @endforeach 31</table> 32</form>
php
1//メール確認画面view 2 3<div>送信メールの確認</div> 4<form action="/mailSentComplete" method="post"> 5@csrf 6<div> 7 <div>タイトル</div> 8 <input id="" 9 name="title" 10 type="text" 11 value="{{ $mailTemplate->name }}" readonly> 12 <!----> 13 <div>本文</div> 14 <div> 15 {!! nl2br(e($mailTemplate->text)) !!} 16 <hr> 17 <p>お届け先氏名 : {{$order->name}}</p> 18 <p>お届け先住所 : {{$order->address}}</p> 19 <hr> 20 <p>注文No : {{$order->order_no}}</p> 21 <hr> 22 @foreach($order->orderitem as $it) 23 <p>商品名 : {{$it->item->name}}</p> 24 <p>価格 : {{$it->item->price}}円</p> 25 <hr> 26 @endforeach 27 <hr> 28 </div> 29 </div> 30 <!----> 31 <div> 32 <input type="hidden" name="template-id" value="{{ $mailTemplate->id }}"> 33 @foreach($sendUsers->check_cancel as $check_id) 34 <input type="hidden" name="order_id" value="{{ $check_id }}"> 35 @endforeach 36 <button>送信する</button> 37 </div> 38</form> 39
PHP
1//web.php 2Route::post ('/mailConfirm', 'HomeController@mailConfirm');//送信メールの確認 3Route::post('/mailSentComplete', 'HomeController@mailSentComplete');//メール送信完了
php
1//Controller 2namespace App\Http\Controllers; 3//リクエスト 4use App\Http\Requests\MailConfirmRequest; 5use App\Http\Requests\MailSentRequest; 6//メール 7use Illuminate\Support\Facades\Mail; 8use App\Mail\OrderConfirmationNotification; 9//テーブルモデル 10use App\Models\AppUser; 11use App\Models\Order; 12use App\Models\MailTemplate; 13 ///////////////////////////////////////////////////////////////////////// 14 //メール送信前の確認 15 public function mailConfirm(MailConfirmRequest $req){ 16 17 return view('mailConfirm',[ 18 'mailTemplate' => MailTemplate::where("id",$req->get("mail-template-id")) 19 ->first(), 20 'order' => Order::where('id',$req->get("check"))->first(), 21 ]); 22 } 23 ///////////////////////////////////////////////////////////////////////// 24 //メール送信用 25 public function mailSentComplete(MailSentRequest $req){ 26 27 $contact = $req->all(); 28 29 $sendUsers = $req->input('order_id'); 30 31 foreach ($sendUsers as $key => $value) { 32 $sendUser = Order::where('id',$value) 33 ->first(); 34 $to = AppUser::where('id',$sendUser['user_id']) 35 ->get(); 36 //メール送信 37 Mail::to($to)->send(new OrderConfirmationNotification($contact)); 38 } 39 40 //送信完了画面 41 return view('mailSentComplete'); 42 } 43}
php
1//Mail/OrderConfirmationNotification 2<?php 3 4namespace App\Mail; 5 6use Illuminate\Bus\Queueable; 7use Illuminate\Mail\Mailable; 8use Illuminate\Queue\SerializesModels; 9use Illuminate\Contracts\Queue\ShouldQueue; 10 11use App\Models\Order; 12use App\Models\MailTemplate; 13 14class OrderConfirmationNotification extends Mailable 15{ 16 use Queueable, SerializesModels; 17 18 /** 19 * Create a new message instance. 20 * 21 * @return void 22 */ 23 protected $contact; 24 public function __construct($contact) 25 { 26 // 27 $this->contact = $contact; 28 } 29 30 /** 31 * Build the message. 32 * 33 * @return $this 34 */ 35 public function build() 36 { 37 return $this->view('emails.orderConfirmationNotification',[ 38 'order' => Order::where('id',$this->contact['order-id'])->first(), 39 'mailTemplate' => MailTemplate::where('id',$this->contact['template-id'])->first() 40 ]) 41 ->from('example@example.com') 42 ->subject($this->contact['title']); 43 } 44}
php
1//OrderConfirmationNotification.blade 2<!DOCTYPE html> 3<html> 4 <body> 5 {!! nl2br(e($mailTemplate->text)) !!} 6 <hr> 7 <p>お届け先氏名 : {{$order->name}}</p> 8 <p>お届け先住所 : {{$order->prefecture.$order->address}}</p> 9 <hr> 10 <p>注文No : {{$order->order_no}}</p> 11 <hr> 12 @foreach($order->orderitem as $it) 13 <p>商品名 : {{$it->item->name}}</p> 14 <p>価格 : {{$it->item->price}}円</p> 15 <hr> 16 @endforeach 17 </body> 18</html> 19 20
見解として「public function mailSentComplete」へチェックをつけたレコードのorder_idが渡ればあとはforeachで回す感じでいけそうなのですが、その値を「public function mailSentComplete」へ渡す方法もいまいちわからず、何卒、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/22 16:16 編集
2019/09/22 16:30
2019/09/23 06:28 編集
2019/09/23 06:28
2019/09/23 06:30
2019/09/23 06:43 編集
2019/09/23 07:01
2019/09/23 16:29