using symfony templating on symfony 1

29
symfony 1 で Symfony Templating でででででででで Kousuke Ebihara <[email protected]>

Upload: kousuke-ebihara

Post on 15-Jan-2015

1.204 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Using Symfony Templating On Symfony 1

symfony 1 で Symfony Templating を使い倒してみ

るKousuke Ebihara

<[email protected]>

Page 2: Using Symfony Templating On Symfony 1

Symfony Templating とはsymfony 1 で Symfony Templating を使い倒してみる

Page 3: Using Symfony Templating On Symfony 1

Symfony Templating とは

Page 4: Using Symfony Templating On Symfony 1

Symfony Templating とは Symfony Components のうちの一つ

Symfony Components は、 Symfony 2 の構成要素となるライブラリ群で、単独で使用できる

いままでに YAML, Event Dispatcher, Dependency Injection が公開されている

YAML と Event Dispatcher は symfony 1.3 でも使われている

Request Handler が近々公開予定 symfony 1.3 で sfForm の独立性が向上したの

で Form の公開もあるかも

Page 5: Using Symfony Templating On Symfony 1

Symfony Templating とは Sensio Labs の Fabien Potencier さん

によるライブラリ 2009 年 9 月 21 日 午後 3 時 39 分

(日本時間)に公開された もちろんドキュメントも揃っている

http://components.symfony-project.org/templating/documentation

もちろんユニットテストのカバレッジは 100 % …… !

Page 6: Using Symfony Templating On Symfony 1

Symfony Templating とは WEB アプリケーションでテンプレートシ

ステムを用いるための必要最小限の機能を提供する

ほとんどすべての機能が拡張可能( = プロジェクトに合ったテンプレートのパーサなどを選択したり、組み合わせたりする自由がある)

Page 7: Using Symfony Templating On Symfony 1

Symfony Templating とは 提供される機能

テンプレートの読み込み sfTemplateLoader によってテンプレートが読み込ま

れる 標準で提供されるのは sfTemplateLoaderFilesystem

という、ファイル経由でテンプレートを読み込む機構 データベースなど任意のストレージからテンプレート

を読み込むためのクラスを記述し、それを用いることができる

キャッシュのための機構も用意されている sfTemplateLoader は sfTemplateLoaderChain に

より 複数指定することが可能

Page 8: Using Symfony Templating On Symfony 1

Symfony Templating とは 提供される機能

テンプレートの出力 sfTemplateRenderer によってテンプレートが

パース、出力される 標準で提供されるのは sfTemplateRendererPhp

という、テンプレートを PHP スクリプトとしてパースする機構

Smarty や PHPTAL など任意のテンプレートエンジンのパーサを利用したクラスを記述し、それを用いることができる

sfTemplateRenderer は複数指定することが可能

Page 9: Using Symfony Templating On Symfony 1

Symfony Templating とは 提供される機能

テンプレートの埋め込み テンプレートの継承( Django や rhaco の

ようなフレームワークで採用されているやつ)

スロット( symfony 1 と同様の機能) ヘルパー

symfony 1 と違い、ヘルパークラスのインスタンスメソッドとしてコールする

ヘルパーに関しては拡張できなかったのがこれで解決

Page 10: Using Symfony Templating On Symfony 1

Symfony Templating の構造

Engine•埋め込み•継承•スロット•エンコーディング•エスケーピング

Loader

FileSystemDB

Cache

Renderer

PHP

Smarty

PHPTAL

Helper

Page 11: Using Symfony Templating On Symfony 1

実際に使ってみるsymfony 1 で Symfony Templating を使い倒してみる

Page 12: Using Symfony Templating On Symfony 1

実際に使ってみる symfony 1.3 で Symfony Templating を試

してみた http://www.tejimaya.com/archives/3618

株式会社手嶋屋開発部の海老原さんによるエントリ 2009 年 9 月 21 日 午後 6 時 19 分(日本時

間)にコードを完成させ、 2009 年 9 月 21 日 午後 7 時 53 分(日本時間)にブログを書き上げた

コードは以下http://github.com/ebihara/examine-template

※cache ディレクトリがないので、使う場合は空ディレクトリ作ってね

Page 13: Using Symfony Templating On Symfony 1

実際に使ってみる ただし、やっていることはビュークラスを

独自のものに差し替えているだけ この程度のことは symfony でなくてもでき

る せっかく symfony を使っているのでプ

ラグインで実現できたら面白そうじゃない?

Page 14: Using Symfony Templating On Symfony 1

実際に使ってみる sfSymfonyTemplatingViewPlugin

http://github.com/ebihara/sfSymfonyTemplatingViewPlugin 株式会社手嶋屋開発部の海老原さんによるプ

ラグイン 2009 年 9 月 26 日 午前 4 時 36 分に

README 作成 現在未だ開発中

ただ、前述のエントリで紹介した程度のことはできます

Page 15: Using Symfony Templating On Symfony 1

sfSymfonyTemplatingViewPluginのアドバンテージ

SymfonyTemplating の全機能を利用できる

設定ファイルを書き換えるだけで複数ストレージや複数パーサを扱うことができるようになる(予定)

symfony 1 のビューに関するあらゆる機能が利用できる ヘルパー関数 透過的なエスケーピング

Page 16: Using Symfony Templating On Symfony 1

使い方 (1)

symfony 1.0 〜 symfony 1.1symfony 1.2 にアップグレードする

symfony 1.2plugins ディレクトリにプラグインを git clone してとってくる

Symfony 1.3plugins ディレクトリにプラグインを git clone して取ってきたあと、 ProjectConfiguration でプラグインを有効にする

Page 17: Using Symfony Templating On Symfony 1

使い方 (2)

全バージョン共通 アプリケーションの layout.php の

$sf_content を $this->get(‘content’) に変える(この手順は不要になるようにしていく予定)

モジュールの view.yml に設定を追加default:

view_class: sfTemplatingComponent

Page 18: Using Symfony Templating On Symfony 1

テンプレートの継承 親となるテンプレート内の特定の部分を、

子で上書きすることができる機能 symfony の template.php がいい活用

例になる

Page 19: Using Symfony Templating On Symfony 1

テンプレートの継承 親となる layout.php を定義

Page 20: Using Symfony Templating On Symfony 1

テンプレートの継承 子となるテンプレートを定義

Page 21: Using Symfony Templating On Symfony 1

テンプレートの継承 結果

Page 22: Using Symfony Templating On Symfony 1

テンプレートの埋め込み まあパーシャルみたいなもの

Page 23: Using Symfony Templating On Symfony 1

スロット スロットはスロットですよ

Page 24: Using Symfony Templating On Symfony 1

sfSymfonyTemplatingViewPlugin による複数ストレージの利用

sfSymfonyTemplatingViewPlugin では、設定ファイル( app.yml )でストレージの設定をおこなうことができる

以下の設定をおこなうことで DB からテンプレートを読み込み、存在しなかった場合にファイルを見に行くようになる

Page 25: Using Symfony Templating On Symfony 1

sfSymfonyTemplatingViewPlugin による複数ストレージの利用

実演タイム

Page 26: Using Symfony Templating On Symfony 1

sfSymfonyTemplatingViewPlugin による複数ストレージの利用

設定ファイルを元に loader 用のクラスインスタンスを作って、 loader に対応した storage のクラスを指定するだけ

storage は、 loader から取得できた結果をラップするクラス storage 毎に loader からの結果に手を加えたりできる( DB から取得した

値は常に layout.php を継承するようにしたりできる) renderer を指定できたりする( DB から取得した値は Smarty としてレン

ダリングするようにしたりとかできる)

Page 27: Using Symfony Templating On Symfony 1

sfSymfonyTemplatingViewPlugin現状の課題

このプレゼンに間に合わせるために慌てて作ったので、ひどい構造である

このプレゼンを作りはじめた以降のユニットテストがない テンプレート名に .php とかついてて邪魔 DB から取ってくるテーブルが template 固定 DB から取ってくるテンプレートが PHP DB から全テンプレートファイルを上書きできる キャッシュしない

ただしキャッシュはキャッシュ用の loader のコンストラクタにキャッシュしたい loader を指定するだけなのですごく簡単にできる。問題は symfony の sfViewCacheManager をどう活用してあげるか(難しければしなくていいと思うけど)

※ただし、技術的には充分実現可能なので、これらの問題を解決するのは時間の問題かと

Page 28: Using Symfony Templating On Symfony 1

sfSymfonyTemplatingViewPlugin当面の目標

前述の課題をすべて解決し、 1.0.0 をリリース

水曜日の PHP 勉強会でお披露目 ただし間に合わなかったら参加しない

Symfony Templating の有用性を広め、 Symfony 2 を待たずに、「今使える技術」として多く利用されるようにする

OpenPNE3 に組み込む symfony の中の人々から絶賛をもらう

Page 29: Using Symfony Templating On Symfony 1

質問タイムsymfony 1 で Symfony Templating を使い倒してみる