SlideShare a Scribd company logo
1 of 39
Download to read offline
Phalcon とメールと
テンプレートと
ゆーし (Yuhshi / 晴柳祐志)
WEB系の SIer で働いてます。
PhalconPHP やってます。
2008年以来2度目の発表です。
PhalconPHP でメール送信
このフレームワークは
メール送信機能は付属していません。
PhalconPHP でメール送信
送信は Qdmail というライブラリに任せました。
本文の生成は PhalconPHP の
テンプレートエンジン Volt に頼ります。
Volt は自動的に PHP ファイルに変換されます。
本文の生成の話
(メール送信そのものはもう話しません!)
$view = new View();
// (ここで初期化)
$view->name = $name; // テンプレートで使う変数
$view->setRenderLevel(
PhalconMvcView::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
mail
?
?> の直後の改行は、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)
まとめ

More Related Content

Viewers also liked (6)

Current status of PSR - Phpblt1
Current status of PSR - Phpblt1Current status of PSR - Phpblt1
Current status of PSR - Phpblt1
 
Writing php extensions in golang
Writing php extensions in golangWriting php extensions in golang
Writing php extensions in golang
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
Phalcon 謹製テンプレートエンジン Volt - Meet phalcon Volt
Phalcon 謹製テンプレートエンジン Volt - Meet phalcon VoltPhalcon 謹製テンプレートエンジン Volt - Meet phalcon Volt
Phalcon 謹製テンプレートエンジン Volt - Meet phalcon Volt
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
 
PHP7ではなくHack/HHVMを選ぶ理由
PHP7ではなくHack/HHVMを選ぶ理由PHP7ではなくHack/HHVMを選ぶ理由
PHP7ではなくHack/HHVMを選ぶ理由
 

Phalcon とメールとテンプレートと