phalcon とメールとテンプレートと
TRANSCRIPT
Phalcon とメールとテンプレートと
ゆーし (Yuhshi / 晴柳祐志)WEB系の SIer で働いてます。
PhalconPHP やってます。
2008年以来2度目の発表です。
PhalconPHP でメール送信
このフレームワークは
メール送信機能は付属していません。
PhalconPHP でメール送信
送信は Qdmail というライブラリに任せました。
本文の生成は PhalconPHP の
テンプレートエンジン Volt に頼ります。
Volt は自動的に PHP ファイルに変換されます。
本文の生成の話(メール送信そのものはもう話しません!)
$view = new View();// (ここで初期化)$view->name = $name; // テンプレートで使う変数
$view->setRenderLevel( \Phalcon\Mvc\View::LEVEL_ACTION_VIEW);$view->start();// テンプレートが views/mail/mail_template.volt にあるなら
$view->render('mail', 'mail_template');$view->finish();return $view->getContent(); // 本文が返ってくる
$view = new View();画面表示用の View インスタンスを使い回して
メール送信 → 送信完了画面表示
としたら画面が真っ白になりました><
メール送信用にインスタンス生成が必須
地獄の改行問題
改行が増える
改行コードを CRLF にしていたら
改行が増えました。
メールサーバのせいなのかライブラリのせいなのか
は追求していませんが、
LF にしてから送信処理に渡すことで回避。
改行が減る
氏名:{{name}}住所:{{address}}↓
氏名:<?php echo $name; ?>住所:<?php echo $address; ?>↓
氏名:ぴよたろう住所:東京都港区
Volt
PHP
?
?> の直後の改行は、PHP によって取り除かれます。
http://jp.php.net/manual/ja/tutorial.firstpage.php
仕方ないので改行の出力を追加しよう
(´・ω・`)
volt で改行文字を追加してみよう
{{“\n”}}
氏名:{{name}}{{“\n”}}住所:{{address}}{{“\n”}} Volt
氏名:{{name}}{{“\n”}}住所:{{address}}{{“\n”}}↓
氏名:<?php echo $name; ?><?php echo ‘\n’; ?>住所:<?php echo $address; ?><?php echo ‘\n’; ?>↓
氏名:ぴよたろう\n住所:東京都港区\n
Volt
PHP
mailそのまま><
シングルクォートで囲ってくれるなんて
Volt さん、親切ですね><
volt で改行文字を追加してみよう その2
{{PHP_EOL}}
氏名:{{name}}{{PHP_EOL}}住所:{{address}}{{PHP_EOL}} Volt
氏名:{{name}}{{PHP_EOL}}住所:{{address}}{{PHP_EOL}}↓
氏名:<?php echo $name; ?><?php echo $PHP_EOL; ?>住所:<?php echo $address; ?><?php echo $PHP_EOL; ?>↓
氏名:ぴよたろう住所:東京都港区
Volt
PHP
mail$PHP_EOL という変数は未定義なので、何も echo されない><
Volt で定数を出力する方法はちゃんと用意されてます
constant(定数名)Reads a PHP constant
https://docs.phalconphp.com/ja/latest/reference/volt.html#id21
volt で改行文字を追加してみよう その3
{{constant(PHP_EOL)}}
氏名:{{name}}{{constant(PHP_EOL)}}住所:{{address}}{{constant(PHP_EOL)}} Volt
氏名:{{name}}{{constant(PHP_EOL)}}住所:{{address}}{{constant(PHP_EOL)}}↓
氏名:<?php echo $name; ?><?php echo PHP_EOL; ?>住所:<?php echo $address; ?><?php echo PHP_EOL; ?>↓
氏名:ぴよたろう
住所:東京都港区
Volt
PHP
mail改行された!
やったね!!
おまけ 1
他の文字は自由に出せないの(´・ω・`)?
Volt の中に PHP そのまま書けるよ(`・ω・´)
volt で改行文字を追加してみよう その4<?php echo “\n”; ?>
氏名:{{name}}<?php echo “\n”; ?>住所:{{address}}<?php echo “\n”; ?>↓
氏名:<?php echo $name; ?><?php echo “\n”; ?>住所:<?php echo $address; ?><?php echo “\n”; ?>↓
氏名:ぴよたろう
住所:東京都港区
Volt
PHP
mailやっぱり改行された!
おまけ 2その他 Volt のトラップ
is not empty
{% if name is not empty %}
↓
<?php if ($name == !$empty) { ?>
name is empty で empty(name) になるが、
name is not empty で !empty(name) にならない
if not (name is empty) にする。
Volt
PHP
配列のメソッドを呼べない
{{ array[‘piyo’].fly() }}
↓
<?php echo ($array[‘piyo’])->fly(); ?>
$array[‘piyo’]->fly() なら問題ないが
なぜかかっこがついて、syntax error になる。
一度別の変数に代入して回避する。
Volt
PHP
まとめ
Volt の挙動が変だと思ったら
変換後の PHP ファイルを確認しましょう!
PhalconPHP 楽しいよ!!!
(時たま闇に踏み込んじゃうけど……w)
まとめ