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

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

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を選ぶ理由
 

Recently uploaded

人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例Kurata Takeshi
 
DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹
DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹
DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹Toru Miyahara
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上mizukami4
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Toru Miyahara
 
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップToru Miyahara
 
20240519 Nagoya Embeded Study session / About the development process.
20240519 Nagoya Embeded Study session / About the development process.20240519 Nagoya Embeded Study session / About the development process.
20240519 Nagoya Embeded Study session / About the development process.ShigekiInatama
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料Toru Miyahara
 

Recently uploaded (7)

人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
人的資本経営のための地理情報インテリジェンス 作業パターン分析と心身状態把握に関する実証事例
 
DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹
DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹
DB性能の基礎 DB性能高速化入門 〜基礎から列指向、GPU活用まで〜 宮原 徹
 
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上【登壇資料】スタートアップCTO経験からキャリアについて再考する  CTO・VPoEに聞く by DIGGLE CTO 水上
【登壇資料】スタートアップCTO経験からキャリアについて再考する CTO・VPoEに聞く by DIGGLE CTO 水上
 
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
Linuxサーバー構築 学習のポイントと環境構築 OSC2024名古屋 セミナー資料
 
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
今年こそ始めたい!SQL超入門 セミナー資料 2024年5月22日 富士通クラウドミートアップ
 
20240519 Nagoya Embeded Study session / About the development process.
20240519 Nagoya Embeded Study session / About the development process.20240519 Nagoya Embeded Study session / About the development process.
20240519 Nagoya Embeded Study session / About the development process.
 
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料今さら聞けない人のためのDevOps超入門 OSC2024名古屋  セミナー資料
今さら聞けない人のためのDevOps超入門 OSC2024名古屋 セミナー資料
 

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