【Laravelメールフォームその2】コントローラー・Mailableクラス・ルーティング・bladeテンプレート設定のしかた
| 更新: 2024/09/25 | 2919文字

今回は、前回行った『Laravelでメールフォームその1』の続きで、Laravelメールフォームを作っていきます。コントローラー・Mailableクラス・ルーティング・bladeテンプレート設定を行い、メール送信機能が使えるところまで進めます。さっそく内容を確認していきましょう。
前回の内容
前回は下準備ということで『外部SMTPサーバー設定・日本語対応・コマンドでコントローラーMailableクラスを作成』というところまでやりました。今回はここから、実際の処理部分のプログラムやフロント表示(bladeテンプレート)、ルーティングを設定していきます。
【Laravelでメールフォームその1】
https://division-web.atelier-ss-agency.com/10039/laravel-mail-setup/
ページやファイル構成
ページの構成
表示で使うページは『トップ・確認・送信後』の3ページです。使用者には見えないですけど、ルーティング上は『送信処理』みたいなものも入っています。対応テンプレートは以下の通りです。
メールのトップ | public/mail/ (/views/mail/index.blade.php) |
---|---|
確認ページ | public/mail/confirm (/views/mail/confirm.blade.php) |
送信完了ページ | public/mail/complete (/views/mail/confirm.blade.php) |
エディットするファイル
今回のメールフォームでエディットしていくファイルは、以下の通りとなります。コントローラーとMailableクラスは前回コマンドで作って、そのほかにテンプレートを追加しました。この記事ではMailForm01Sendって名前を付けているわりには、中で送信処理を行っていない点はご了承ください。 (*チームで作る案件のときは、内容に準拠した命名規則のほうがよいです。他の人がわからなくなるので。)
コントローラー (/app/Http/Controllers) |
MailForm01Controller.php |
---|---|
Mailableクラス (/app/Mail/) |
MailForm01Send.php |
ルーティング (/routes/) |
web.php |
テンプレート (/resources/views/mail) |
complete.blade.php(完了)
confirm.blade.php(確認) index.blade.php(メールのトップ) mailcontent.blade.php(メール本文) |
Laravelメールフォーム コード一覧
ルーティング(/routes/web.php)
ポイントは通常のmailトップにアクセスしたときのメソッドは『get』で、それ以外は送信したフォームの値を扱うので『post』になります。コールバックのパスが長いけど、エイリアスにするとか、変数にして使いまわす、みたいなのもアリです。
コントローラー(/app/Http/Controllers/MailForm01Controller.php)
表示切り替え、バリデーション、送信処理を行います。冒頭の方でロードしたMailableクラスは、本文やメールヘッダーセットして送るときに使います。Mail::to送り先は、配列で渡すと複数わたせるようです(これで、自動返信と同じ内容が管理者にも届く)。
Mailableクラス(/app/Mail/MailForm01Send.php)
名前の割に実際には送信処理してないので、適切な名前があれば入れ変えたいところです。本文のセットや、Envelopeメソッドでヘッダー情報セット、みたいな形で使っています。Addressクラスは初期状態では書いてないので、useでインポートしました。
トップテンプレート(index.blade.php)
『@csrf』は、CSRF保護のディレクティブです(トークンセットみたいな感じ?無いと419)。{{old(〇〇)}}は、フォーム入力した前の状態を表示、みたいな関数。前の状態セットをphpで一から作ると、結構めんどくさかったです。
確認画面テンプレート(confirm.blade.php)
フォームのaction先は、MailForm01Controllerの送信メソッドとなります。値は送信した内容を取ってきて表示しているだけ。本文は改行タグが出力されるので、エスケープ処理はしない形にしました。
メール本文テンプレート(mailcontent.blade.php)
本文もサクッと。これ自体はMailableクラス内のcontentメソッドで、このテンプレートにそった本文としてセットされる、みたいな処理ですね。
送信完了画面テンプレート(complete.blade.php)
送信後はこの画面に。直接入った場合はトークンがセットされていないので419エラーになります。トップページリンクを書いているけど、リダイレクトとかでもよいかも。
表示・操作してみた例
ではさっそく操作してみましょう。トップページはこんな感じで、普通のフォームです。
確認画面です。戻ったときの、入力した値セットは、{{old(〇〇)}}がやってくれます。
送信後は、このページへ。
確認ページにフォーム入力しないで直接入るなど、トークンが無い・一致しないなどの不正な遷移の場合は、こういうエラー画面になるので、トップに戻って最初からきちんと操作すればokです。
実際のメールは、こんな感じで送られてきます。これがmailcontent.blade.phpでセットした内容です。
あとがき・まとめ
- Laravelメールフォームはコントローラーやルーティングのほか、Mailableクラスも使う
- bladeテンプレートでの入力した値セット{{old(〇〇)}}や、コントローラ・Mailableクラスの宛先セットは結構ラク
まとめると、こんなところでしょうか。管理人はいちからメールフォームを作ったこともありましたが、ルーティングや必要クラスさえ押さえてしまえば、Laravelのほうがサクサク制作できる印象をうけました。
【カテゴリ】- Laravel
【タグ】- Laravel, PHP, メールフォーム