Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,034 views

Published on

PHP BLT #1 2015-11-24
http://phpblt.connpass.com/event/21929/

Published in: Engineering
  • Be the first to comment

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

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

×