質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
87.20%
Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

Laravel お問い合わせ送信完了メールの記述について

yuchet20
yuchet20

総合スコア0

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0評価

0クリップ

658閲覧

投稿2020/07/29 04:00

前提・実現したいこと

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

///confirm.blade.php(確認画面) @extends('layouts.base') @section('content') <form action="{{route('contact.complete')}}" method="post" class="form"> @csrf <p class="form_req"> 「<span style="color: red;">&#8727;</span>」の項目は入力必須の項目です。 </p> <table class="form_body"> <tr class="formLine"> <th class="formTitle">貴社名(法人の方のみ)</th> <td class="formContent"> <div> {{ $contact['company'] }} <input type="hidden" name="company" value="{{ $contact["company"] }}"> </div> </td> </tr> <tr class="formLine"> <th class="formTitle">お名前(ご担当者様)<span style="color: red";>*</span></th> <td class="formContent"> <div> {{ $contact['name'] }} <input type="hidden" name="name" value="{{ $contact["name"] }}"> </div> </td> </tr> <tr class="formLine"> <th class="formTitle">電話番号</th> <td class="formContent"> <div class="tel"> {{ $contact['tel'] }} <input type="hidden" name="tel" value="{{ $contact["tel"] }}"> </div> </td> </tr> <tr class="formLine"> <th class="formTitle">メールアドレス<span style="color: red";>*</span></th> <td class="formContent"> <div> {{ $contact['email'] }} <input type="hidden" name="email" value="{{ $contact["email"] }}"> </div> </td> </tr> <tr class="formLine"> <th class="formTitle">ご質問・ご要望内容<span style="color: red";>*</span></th> <td class="formContent"> <div> {!! nl2br(e($contact['message'])) !!} <input type="hidden" name="message" value="{{ $contact["message"] }}"> </div> </td> </tr> </table> <input name="action" type="submit" value="入力画面に戻る" class="form_btn"> <input name="action" type="submit" value="送信する" class="form_btn"> </form> @endsection

PHP

///ContactController <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Mail\ContactSendmail; class ContactController extends Controller { private $formItems = ["company", "name", "tel", "email", "message"]; public function index() { return view('contact.index'); } public function confirm(Request $request) { $this->validate($request, [ 'name' => 'required', 'email' => 'required|email', 'message' => 'required' ]); $contact = $request->all(); return view('contact.confirm', compact('contact')); } public function complete(Request $request) { $this->validate($request, [ 'name' => 'required', 'email' => 'required|email', 'message' => 'required' ]); $action = $request->input('action'); $inputs = $request->except('action'); if($action === '入力画面に戻る'){ return redirect()->route('contact.index')->withInput($inputs); } else { \Mail::to($inputs['email'])->send(new ContactSendmail($inputs)); $request->session()->regenerateToken(); return view('contact.complete'); } } }

PHP

///ContactSendmail.php <?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class ContactSendmail extends Mailable { use Queueable, SerializesModels; private $company; private $name; private $tel; private $email; private $message; /** * Create a new message instance. * * @return void */ public function __construct($inputs) { $this->company = $inputs['company']; $this->name = $inputs['name']; $this->tel = $inputs['tel']; $this->email = $inputs['email']; $this->message = $inputs['message']; } /** * Build the message. * * @return $this */ public function build() { return $this ->from('myaddress@gmail.com') ->subject('自動送信メール') ->view('contact.mail') ->with([ 'company' => $this->company, 'name' => $this->name, 'tel' => $this->tel, 'email' => $this->email, 'message' => $this->message, ]); } }

PHP

///mail.blade.php お問い合わせ内容を受け付けました。<br> <br> ■貴社名<br> {!! $company !!}<br> <br> ■お名前(法人の方はご担当者様)<br> {!! $name !!}<br> <br> ■電話番号<br> {!! $tel !!}<br> <br> ■メールアドレス<br> {!! $email !!}<br> <br> ■ご質問・お問い合わせ内容<br> {!! nl2br($message) !!}<br>

試したこと

一旦、下記の記述に変えてmessageを文字列とすることで、メールを送る機能自体が動くか試してみました。

<mail.blade.php内>
■ご質問・お問い合わせ内容<br>

{!! 'message' !!}<br>

結果、メールの送信に成功し、内容も貴社名〜メールアドレスの項目までは入力した値で記載されており、ご質問・お問い合わせ内容の項目もmessageと文字列で受け取れていました。

$messageにユーザーの入力した内容(文字列)を入れるところさえできれば、解決すると思います。
PHP、Laravel初心者のため初歩的なことになるかもしれませんが、ご教示いただけるとありがたいです。

補足情報(FW/ツールのバージョンなど)

nl2brの引数に文字列が入っていないと今回のようなエラーが出るところまでは調べて分かったのですが、そこから先にうまく進めず、、、という状況です。
よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。