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

Post on 15-Apr-2017

4.226 Views

Category:

Engineering

6 Downloads

Preview:

Click to see full reader

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

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)

まとめ

top related