
Emailの機能はたくさんの場面で利用されます。Cakephpのメール機能には専用のレイアウトを用意することができます。
※実際のメール送信には app.php などで EmailTransport メール送信設定も必要です。
以下、メール機能の実装例です(ほぼマニュアル通り)
use Cake\Mailer\Mailer;
// クラス内かつ、メソッド内で
$mailer = new Mailer();
$mailer
->setEmailFormat('text')
->setTo('bob@example.com')
->setFrom('app@domain.com')
->viewBuilder()
->setTemplate('welcome')
->setLayout('fancy')
->setViewVars(['hoges' => $hoges]);
$mailer->deliver();
メールの専用レイアウトは setLayout() で指定できます。ちなみにCake2時代では template() メソッドの第二引数でレイアウトを指定する形になっていました。
あとは、templates/layout/email/text/fancy.php でヘッダーやフッター部分など、使いまわすテンプレートを記述しておけばOKです。
必要なメールテンプレートファイルとしては、
- templates/email/text/welcome.php
- templates/layout/email/text/fancy.php
の2つになるかと思います。
メールレイアウトテンプレートの中身(fancy.php)は、
// ヘッダー内容
// 個別テンプレートファイル
$this->fetch('content');
// フッター内容
--------------------------
連絡先とか
--------------------------
$this->fetch('content') することで、各テンプレートファイルを読み込んでくれます。
ちょっと話は脱線するけど、setViewVars() はコントローラー処理でフェッチしたデータ群の変数を送りこむことができます。これも良く使うと思うのでついでに記述しました。
■ Cakephp4: テンプレートメールの送信
https://book.cakephp.org/4/ja/core-libraries/email.html#id6