Posts tagged mail
CakePHP でビューでメール本文を作成する方法
0前回の記事でメール用のビューを管理する方法を書きましたが、
今回はビューを使用してメール本文を作成する方法です。
前提として
- メール用のレイアウト名は /app/views/layouts/email.thtml で管理
- メール本文に使用するビューは /app/views/email/hoge.thtml
だとすると
ob_start();
という感じで、$body に本文が入ります。
$this->render(null, 'email', '/path/to/app/views/email/hoge.thtml');
$body = ob_get_clean();
ちなみにレイアウトを指定しないと default.thtml が使用されHTMLタグが入ってしまいます。
emial.thtml で
ここにメールの共通ヘッダなどなど <?php echo $content_for_layout; ?> ----------------------------------- ここに署名などなど -----------------------------------
としておけば、HTMLタグも入らずに署名やヘッダなども読み込めてよいかと思います。
CakePHP でコントローラ名以外の view を指定する方法
3CakePHP では HogeController::foo() に対するビューは
/app/views/hoge/foo.thtml
になります。
このときに、/app/views/hoge/foo2.thtml というビューを使用したいときは
HogeController::foo() で
$this->render('foo2');
と指定すればOKです。
今回違うコントローラ名で管理しているビューを使用できないものかと
/cake/libs/view/view.php
を調べてみたところ
$this->render(null, 'layout', '/path/to/app/views/email/register.thtml');
という方法で
/app/views/email/register.thtml
のビューを HogeController::foo() から使用できました。
render の第3引数に絶対パスで使用したいビューを指定すればOKです。
第1引数でビュー名を指定しますが、第3引数が指定されていると無視されます。
また、レイアウトは第2引数でそのまま指定できます。
あまり他のコントローラのビューを使用することはないと思いますが、
例えば、メール送信時に使用するビューを
/app/views/email/
などのディレクトリ名で管理するなどが用途として考えられます。