読者です 読者をやめる 読者になる 読者になる

masalibの日記

システム開発、運用と猫の写真ブログです

クローラーのサービスを作る その3:TWIGの調査

PHPのテンプレートエンジンといえばSmartyですが
GAE(Google App Engine)では使えないや使うのに一苦労があるという
記事が書いてあった

テンプレートエンジンとは
Wikipedia引用

テンプレートと呼ばれる雛形と、あるデータモデルで表現される入力データを合成し、
成果ドキュメントを出力するソフトウェアまたはソフトウェアコンポーネントである

MVCモデルのViewの部分に該当します

Googleの公式のサンプルでは
Symfony frameworkがあってそちらに
TWIGというテンプレートエンジンが使われていた
いきなりSymfonyフレームワークを学習するには
時間がかかりすぎるのでテンプレートエンジンを調査しました

https://cloud.google.com/appengine/docs/php/symfony-hello-world

TWIGとは

フレキシブル、高速、かつセキュアな
PHP用のテンプレートエンジン

フレキシブル

開発者が独自のカスタムタグやフィルタ
を定義し、独自のDSLを作成することができます。

高速

コンパイルプレーンな最適化されたPHPコードに
テンプレートをダウン。定期的なPHPコードに比べて
オーバーヘッドが非常に最小限に抑えました。

セキュア:

サンドボックスの信頼されていないテンプレートの
コードを評価するためのモードです。
これはTWIGは、ユーザーがテンプレートのデザインを
変更することができる
アプリケーションのためのテンプレート言語として
使用することができます。
 (セキュアの翻訳の意味がわからん・・・)

公式サイト

http://twig.sensiolabs.org/
英語のみです・・・

インストール

公式にはcomposerというパッケージ管理ソフトで
いれるみたい

composer require twig/twig:~1.0

composerをいれるのがめんどくさいので
gitでいれました

cd c:\test
git clone https:github.com/twigphp.git

フォルダ構成は以下のとおりです

f:id:masalib:20150819150927j:plain

たぶんlibとtestしか使わないからそれをコピー
上の階層にコピーしました

お約束のページ出力

プロジェクトの直下(C:\test\appengine-try-php-master)に
templatestというフォルダを作成しました
helloworld.html.twigというファイルを作成して
下記を入力しました

<!doctype html>
<html lang="ja">
<head>
<title>{{ title }} | masalibのホームページ</title>
</head>
<body>
{{ message }}
</body>
</html>

helloworld.phpを修正しました

//テンプレートエンジンを読み込む
require_once("lib/Twig/Autoloader.php");
Twig_Autoloader::register();

//テンプレートファイルがあるフォルダを指す
$loader = new Twig_Loader_Filesystem("templates/");
$twig = new Twig_Environment($loader, array());

//テンプレートファイルを指定する
$template = $twig->loadTemplate("helloworld.html.twig");

//テンプレートに対して文字を差し替える
$page = array(
"title" => "トップページ",
"message" => "helloworld"
);
$template->display($page );


出力されたHTML

<!doctype html>
<html lang="ja">
<meta charset="UTF-8">
<head>
<title>トップページ | masalibホームページ</title>
</head>
<body>
helloworld
</body>
</html>


f:id:masalib:20150819201438j:plain

現時点で理解しているsmartyの違い

出力部分かな・・・

TWIGの場合

$page = array(
"title" => "トップページ",
"message" => "helloworld"
);
$template->display($page );


smartyの場合

$smarty->assign("titel", "トップページ");
$smarty->assign("message", "helloworld");
$smarty->display($templete);


TWIGの入門的な部分ができたので
ヘッダーとフッター表示とか
一覧表示とか、フォームとかを
調査していきます


記事を書くために参考にサイトは以下のとおりです
ありがとうございます
http://akisi.tabiyaku.net/?p=896
http://qiita.com/tomk79/items/5ab61b4b24fb80fe8a90