Templatingコンポーネントのコードが公開されました

Symfony Templating is now available. Download the code, read the documentation, and provide feedback http://bit.ly/templating

Fabien Potencier on Twitter: "Symfony Templating is now available. Download the code, read the documentation, and provide feedback http://bit.ly/templating"

The Symfony Templating component is a thin and flexible layer on top of PHP that provides simple but powerful features, covering most templating common needs.

Templating component (Symfony Components)

現在のsymfonyは1つの大きなフレームワークになっていますが、symfonyは将来的に独立した小さなコンポーネントの集合体のように変わっていきます。現在コンポーネントには、

  • YAML
  • Event Dispatcher
  • Dependency Injection
  • Templating
  • Request Handler

という5つのコンポーネントが発表されており、そのうち「YAML」「Event Dispatcher」「Dependency Injection」の3つに関しては既にソースコードが公開されていました。
そして本日、コンポーネント第4弾となる「Templating」のソースコードが新たに公開されました。

Symfony2で採用されるこのTemplatingコンポーネントですが、symfony1系と比べて大きく変わっています。今まではPHPベースのテンプレートに、ヘルパーという関数群を使ってHTMLなどの生成を行い、パーシャルやコンポーネントを用いてテンプレートの部品化を行っていました。

Templatingコンポーネントでは、この考え方そのものは大きくは変わっていません。どちらかというとよりシンプルに、そしてよりフレキシブルになったのがこのTemplatingです。

実際に動くコードを書くとちょっと面倒くさいのでそこはドキュメントを読んでいただくとして、どのように変わっているのかを説明したいと思います。

まず大きく分けて4つの役割に分かれています。TemplateEngine、TemplateLoader、TemplateRenderer、TemplateHelperです。それぞれの役割を簡単に説明します。(使ってないので正しいかはわかりません)

TemplateEngine

Templatingのコアとなる部分です。実際のテンプレートの制御はLoaderやRendererに委ねる形になります。
他にもHelperやスロットの管理なども行います。

TemplateLoader

テンプレートそのものの管理を行う部分です。テンプレートをファイルとして扱ったり、データベースを用いて管理するなどが可能です。
テンプレートのキャッシュもこの部分になります。

TemplateRenderer

テンプレートのレンダリングを管理する部分です。デフォルトでsfTemplateRendererPhpが用意されており、従来の生PHPを用いたテンプレートのレンダリングを行います。
ドキュメントにPHPTALを用いてレンダリングを行うためのサンプルも用意されています。

TemplateHelper

従来のヘルパーとほぼ同じです。大きく変わる点としては、関数群からクラスになります。ですので今までできなかったヘルパーの上書きができるようになります。


これで発表されているテンプレーティングとしてはRequest Handler以外のものは出そろいましたね。残るRequest Handlerはフレームワークの「核」となる部分ですが、実装自体はシンプルになると思います。

このコンポーネント以外にもDoctrine2やLime2といったsymfonyを語る上で欠かせないライブラリも現在開発中のソースコードが公開されていますし、ばらばらではありますが、徐々に形が見えてきましたね。

これらのコンポーネントがどのような形で「Symfony2」を作るのかはとても興味深いのですが、先日Fabien氏とお話しした際の感触からは、もうしばらく先になるのかという感じです。待ち遠しくて仕方がありません。