Cakephp PHP WEB開発

【Cakephp4】メール: テンプレートレイアウトの利用方法

※本サイトはPR表記を含みます。

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

-Cakephp, PHP, WEB開発
-