前提・実現したいこと
Laravel(6.0)でお問い合わせフォームを作り、送信が完了したら自動送信メールが飛ぶ機能を実装中です。
具体的には下記のような形でファイルを作っています。
①contactフォルダ->index.blade.php(お問い合わせ入力画面)
②contactフォルダ->confirm.blade.php(確認画面)
③contactフォルダ->complete.blade.php(送信完了画面)
④ContactController.php
⑤ContactSendmail.php
⑥mail.blade.php
.envのメール設定、gmailの2段階認証ON、アプリパスワード取得もOK
発生している問題・エラーメッセージ
入力画面での入力→確認画面への遷移までは何とか辿り着いたのですが、最後に確認画面で送信ボタンを押すと下記のエラーが出てしまいます。
----エラー文---- nl2br() expects parameter 1 to be string, object given.... ----該当箇所---- <mail.blade.php内> ■ご質問・お問い合わせ内容<br> {!! nl2br($message) !!}<br>
該当のソースコード
PHP
1///confirm.blade.php(確認画面) 2 3@extends('layouts.base') 4@section('content') 5<form action="{{route('contact.complete')}}" method="post" class="form"> 6 @csrf 7 <p class="form_req"> 8 「<span style="color: red;">∗</span>」の項目は入力必須の項目です。 9 </p> 10 <table class="form_body"> 11 <tr class="formLine"> 12 <th class="formTitle">貴社名(法人の方のみ)</th> 13 <td class="formContent"> 14 <div> 15 {{ $contact['company'] }} 16 <input type="hidden" name="company" value="{{ $contact["company"] }}"> 17 </div> 18 </td> 19 </tr> 20 <tr class="formLine"> 21 <th class="formTitle">お名前(ご担当者様)<span style="color: red";>*</span></th> 22 <td class="formContent"> 23 <div> 24 {{ $contact['name'] }} 25 <input type="hidden" name="name" value="{{ $contact["name"] }}"> 26 </div> 27 </td> 28 </tr> 29 <tr class="formLine"> 30 <th class="formTitle">電話番号</th> 31 <td class="formContent"> 32 <div class="tel"> 33 {{ $contact['tel'] }} 34 <input type="hidden" name="tel" value="{{ $contact["tel"] }}"> 35 </div> 36 </td> 37 </tr> 38 <tr class="formLine"> 39 <th class="formTitle">メールアドレス<span style="color: red";>*</span></th> 40 <td class="formContent"> 41 <div> 42 {{ $contact['email'] }} 43 <input type="hidden" name="email" value="{{ $contact["email"] }}"> 44 </div> 45 </td> 46 </tr> 47 <tr class="formLine"> 48 <th class="formTitle">ご質問・ご要望内容<span style="color: red";>*</span></th> 49 <td class="formContent"> 50 <div> 51 {!! nl2br(e($contact['message'])) !!} 52 <input type="hidden" name="message" value="{{ $contact["message"] }}"> 53 </div> 54 </td> 55 </tr> 56 </table> 57 <input name="action" type="submit" value="入力画面に戻る" class="form_btn"> 58 <input name="action" type="submit" value="送信する" class="form_btn"> 59</form> 60@endsection
PHP
1///ContactController 2 3<?php 4 5namespace App\Http\Controllers; 6 7use Illuminate\Http\Request; 8use App\Mail\ContactSendmail; 9 10class ContactController extends Controller 11{ 12 private $formItems = ["company", "name", "tel", "email", "message"]; 13 14 public function index() { 15 return view('contact.index'); 16 } 17 18 public function confirm(Request $request) { 19 20 $this->validate($request, [ 21 'name' => 'required', 22 'email' => 'required|email', 23 'message' => 'required' 24 ]); 25 26 $contact = $request->all(); 27 return view('contact.confirm', compact('contact')); 28 } 29 30 public function complete(Request $request) { 31 $this->validate($request, [ 32 'name' => 'required', 33 'email' => 'required|email', 34 'message' => 'required' 35 ]); 36 37 $action = $request->input('action'); 38 $inputs = $request->except('action'); 39 40 41 if($action === '入力画面に戻る'){ 42 return redirect()->route('contact.index')->withInput($inputs); 43 } else { 44 45 46 \Mail::to($inputs['email'])->send(new ContactSendmail($inputs)); 47 48 $request->session()->regenerateToken(); 49 50 return view('contact.complete'); 51 } 52 } 53}
PHP
1///ContactSendmail.php 2 3<?php 4 5namespace App\Mail; 6 7use Illuminate\Bus\Queueable; 8use Illuminate\Contracts\Queue\ShouldQueue; 9use Illuminate\Mail\Mailable; 10use Illuminate\Queue\SerializesModels; 11 12class ContactSendmail extends Mailable 13{ 14 use Queueable, SerializesModels; 15 16 private $company; 17 private $name; 18 private $tel; 19 private $email; 20 private $message; 21 /** 22 * Create a new message instance. 23 * 24 * @return void 25 */ 26 27 public function __construct($inputs) 28 { 29 $this->company = $inputs['company']; 30 $this->name = $inputs['name']; 31 $this->tel = $inputs['tel']; 32 $this->email = $inputs['email']; 33 $this->message = $inputs['message']; 34 } 35 36 /** 37 * Build the message. 38 * 39 * @return $this 40 */ 41 public function build() 42 { 43 return $this 44 ->from('myaddress@gmail.com') 45 ->subject('自動送信メール') 46 ->view('contact.mail') 47 ->with([ 48 'company' => $this->company, 49 'name' => $this->name, 50 'tel' => $this->tel, 51 'email' => $this->email, 52 'message' => $this->message, 53 ]); 54 } 55}
PHP
1///mail.blade.php 2 3お問い合わせ内容を受け付けました。<br> 4<br> 5■貴社名<br> 6{!! $company !!}<br> 7<br> 8■お名前(法人の方はご担当者様)<br> 9{!! $name !!}<br> 10<br> 11■電話番号<br> 12{!! $tel !!}<br> 13<br> 14■メールアドレス<br> 15{!! $email !!}<br> 16<br> 17■ご質問・お問い合わせ内容<br> 18{!! nl2br($message) !!}<br>
試したこと
一旦、下記の記述に変えてmessageを文字列とすることで、メールを送る機能自体が動くか試してみました。
<mail.blade.php内>
■ご質問・お問い合わせ内容<br>
{!! 'message' !!}<br>
結果、メールの送信に成功し、内容も貴社名〜メールアドレスの項目までは入力した値で記載されており、ご質問・お問い合わせ内容の項目もmessageと文字列で受け取れていました。
$messageにユーザーの入力した内容(文字列)を入れるところさえできれば、解決すると思います。
PHP、Laravel初心者のため初歩的なことになるかもしれませんが、ご教示いただけるとありがたいです。
補足情報(FW/ツールのバージョンなど)
nl2brの引数に文字列が入っていないと今回のようなエラーが出るところまでは調べて分かったのですが、そこから先にうまく進めず、、、という状況です。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。