Successfully reported this slideshow.
Your SlideShare is downloading. ×

Using Symfony Templating On Symfony 1

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 29 Ad

More Related Content

Advertisement

Recently uploaded (20)

Using Symfony Templating On Symfony 1

  1. 1. symfony 1 でSymfonyTemplatingを使い倒してみる<br />KousukeEbihara &lt;ebihara@tejimaya.com&gt;<br />
  2. 2. SymfonyTemplatingとは<br />symfony 1 でSymfonyTemplatingを使い倒してみる<br />
  3. 3. SymfonyTemplatingとは<br />
  4. 4. SymfonyTemplatingとは<br />Symfony Components のうちの一つ<br />Symfony Components は、Symfony 2 の構成要素となるライブラリ群で、単独で使用できる<br />いままでに YAML, Event Dispatcher, Dependency Injection が公開されている<br />YAML と Event Dispatcher はsymfony 1.3 でも使われている<br />Request Handler が近々公開予定<br />symfony 1.3 でsfFormの独立性が向上したので Form の公開もあるかも<br />
  5. 5. SymfonyTemplatingとは<br />Sensio Labs の Fabien Potencierさんによるライブラリ<br />2009 年 9 月 21 日午後 3 時 39 分(日本時間)に公開された<br />もちろんドキュメントも揃っているhttp://components.symfony-project.org/templating/documentation<br />もちろんユニットテストのカバレッジは 100 %<br />……!<br />
  6. 6. SymfonyTemplatingとは<br />WEB アプリケーションでテンプレートシステムを用いるための必要最小限の機能を提供する<br />ほとんどすべての機能が拡張可能(= プロジェクトに合ったテンプレートのパーサなどを選択したり、組み合わせたりする自由がある)<br />
  7. 7. SymfonyTemplatingとは<br />提供される機能<br />テンプレートの読み込み<br />sfTemplateLoaderによってテンプレートが読み込まれる<br />標準で提供されるのはsfTemplateLoaderFilesystemという、ファイル経由でテンプレートを読み込む機構<br />データベースなど任意のストレージからテンプレートを読み込むためのクラスを記述し、それを用いることができる<br />キャッシュのための機構も用意されている<br />sfTemplateLoaderはsfTemplateLoaderChainにより複数指定することが可能<br />
  8. 8. SymfonyTemplatingとは<br />提供される機能<br />テンプレートの出力<br />sfTemplateRendererによってテンプレートがパース、出力される<br />標準で提供されるのはsfTemplateRendererPhpという、テンプレートを PHP スクリプトとしてパースする機構<br />Smarty や PHPTAL など任意のテンプレートエンジンのパーサを利用したクラスを記述し、それを用いることができる<br />sfTemplateRendererは複数指定することが可能<br />
  9. 9. SymfonyTemplatingとは<br />提供される機能<br />テンプレートの埋め込み<br />テンプレートの継承(Djangoやrhacoのようなフレームワークで採用されているやつ)<br />スロット(symfony 1 と同様の機能)<br />ヘルパー<br />symfony 1 と違い、ヘルパークラスのインスタンスメソッドとしてコールする<br />ヘルパーに関しては拡張できなかったのがこれで解決<br />
  10. 10. SymfonyTemplatingの構造<br />Engine<br /><ul><li>埋め込み
  11. 11. 継承
  12. 12. スロット
  13. 13. エンコーディング
  14. 14. エスケーピング</li></ul>Loader<br />Renderer<br />Helper<br />FileSystem<br />PHP<br />DB<br />Smarty<br />PHPTAL<br />Cache<br />
  15. 15. 実際に使ってみる<br />symfony 1 でSymfonyTemplatingを使い倒してみる<br />
  16. 16. 実際に使ってみる<br />symfony 1.3 で SymfonyTemplatingを試してみた http://www.tejimaya.com/archives/3618<br />株式会社手嶋屋開発部の海老原さんによるエントリ<br />2009 年 9 月 21 日午後 6 時 19 分(日本時間)にコードを完成させ、 2009 年 9 月 21 日午後 7 時 53 分(日本時間)にブログを書き上げた<br />コードは以下http://github.com/ebihara/examine-template<br />※cache ディレクトリがないので、使う場合は空ディレクトリ作ってね<br />
  17. 17. 実際に使ってみる<br />ただし、やっていることはビュークラスを独自のものに差し替えているだけ<br />この程度のことはsymfonyでなくてもできる<br />せっかくsymfonyを使っているのでプラグインで実現できたら面白そうじゃない?<br />
  18. 18. 実際に使ってみる<br />sfSymfonyTemplatingViewPluginhttp://github.com/ebihara/sfSymfonyTemplatingViewPlugin<br />株式会社手嶋屋開発部の海老原さんによるプラグイン<br />2009 年 9 月 26 日午前 4 時 36 分に README 作成<br />現在未だ開発中<br />ただ、前述のエントリで紹介した程度のことはできます<br />
  19. 19. sfSymfonyTemplatingViewPluginのアドバンテージ<br />SymfonyTemplatingの全機能を利用できる<br />設定ファイルを書き換えるだけで複数ストレージや複数パーサを扱うことができるようになる(予定)<br />symfony 1 のビューに関するあらゆる機能が利用できる<br />ヘルパー関数<br />透過的なエスケーピング<br />
  20. 20. 使い方(1)<br />symfony 1.0 〜 symfony 1.1symfony 1.2 にアップグレードする<br />symfony 1.2pluginsディレクトリにプラグインをgit clone してとってくる<br />Symfony 1.3pluginsディレクトリにプラグインをgit clone して取ってきたあと、ProjectConfigurationでプラグインを有効にする<br />
  21. 21. 使い方(2)<br />全バージョン共通<br />アプリケーションのlayout.phpの $sf_contentを $this-&gt;get(‘content’) に変える(この手順は不要になるようにしていく予定)<br />モジュールのview.ymlに設定を追加<br />default:view_class: sfTemplatingComponent<br />
  22. 22. テンプレートの継承<br />親となるテンプレート内の特定の部分を、子で上書きすることができる機能<br />symfonyのtemplate.phpがいい活用例になる<br />
  23. 23. テンプレートの継承<br />親となるlayout.phpを定義<br />
  24. 24. テンプレートの継承<br />子となるテンプレートを定義<br />
  25. 25. テンプレートの継承<br />結果<br />
  26. 26. テンプレートの埋め込み<br />まあパーシャルみたいなもの<br />
  27. 27. スロット<br />スロットはスロットですよ<br />
  28. 28. sfSymfonyTemplatingViewPluginによる複数ストレージの利用<br />sfSymfonyTemplatingViewPluginでは、設定ファイル(app.yml)でストレージの設定をおこなうことができる<br />以下の設定をおこなうことで DB からテンプレートを読み込み、存在しなかった場合にファイルを見に行くようになる<br />
  29. 29. sfSymfonyTemplatingViewPluginによる複数ストレージの利用<br />実演タイム<br />
  30. 30. sfSymfonyTemplatingViewPluginによる複数ストレージの利用<br />設定ファイルを元に loader 用のクラスインスタンスを作って、 loader に対応した storage のクラスを指定するだけ<br />storage は、 loader から取得できた結果をラップするクラス<br />storage 毎に loader からの結果に手を加えたりできる(DB から取得した値は常にlayout.phpを継承するようにしたりできる)<br />renderer を指定できたりする(DB から取得した値は Smarty としてレンダリングするようにしたりとかできる)<br />
  31. 31. sfSymfonyTemplatingViewPlugin現状の課題<br />このプレゼンに間に合わせるために慌てて作ったので、ひどい構造である<br />このプレゼンを作りはじめた以降のユニットテストがない<br />テンプレート名に .phpとかついてて邪魔<br />DB から取ってくるテーブルが template 固定<br />DB から取ってくるテンプレートが PHP<br />DB から全テンプレートファイルを上書きできる<br />キャッシュしない<br />ただしキャッシュはキャッシュ用の loader のコンストラクタにキャッシュしたい loader を指定するだけなのですごく簡単にできる。問題はsymfonyのsfViewCacheManagerをどう活用してあげるか(難しければしなくていいと思うけど)<br />※ただし、技術的には充分実現可能なので、これらの問題を解決するのは時間の問題かと<br />
  32. 32. sfSymfonyTemplatingViewPlugin当面の目標<br />前述の課題をすべて解決し、 1.0.0 をリリース<br />水曜日の PHP 勉強会でお披露目<br />ただし間に合わなかったら参加しない<br />SymfonyTemplatingの有用性を広め、Symfony 2 を待たずに、「今使える技術」として多く利用されるようにする<br />OpenPNE3 に組み込む<br />symfonyの中の人々から絶賛をもらう<br />
  33. 33. 質問タイム<br />symfony 1 でSymfonyTemplatingを使い倒してみる<br />

×