symfony1.4.9でのテンプレートコード リファクタリング
2011年5月21日突貫で作業していると、案外車輪を何度も作ってます。
ある程度作業が進むと、リファクタリングを心がけてはいますが、テンプレートコードの再利用に関しては、なかなか複雑。
そこで、一旦まとめてみることにしました。
- インクルード(include)
- パーシャル(partial)
- コンポーネント(component)
- コンポーネントスロット(component_slot)
- スロット(slot)
インクルード(include)
- 対象:
- 共通化された静的なHTMLや、
- actionなどに依存しないPHPコード
- 例:
- 静的メニュー
- フッター
<?php include(sfConfig::get('sf_app_template_dir'). '/footer.php')) ?>
パーシャル(partial)
- 対象:
- 上記、インクルードにactionから引数を渡せる
- 例:
- ヘッダー(タイトルの動的変更など)
- 保存先例:
- apps/<<appname>>/templates/_title.php
// apps/<<appname>>/templates/layout.php <?php include_partial('global/title', array('title' => $title)) ?>
コンポーネント(component)
- 対象:
- パーシャルよりもさらに独立したロジックが必要な場合に利用
- ログインフォームを含むようなサイドバーや、actionとロジックを分けて表示させるような場合に利用
- テンプレートの他、actions/components.class.phpが必要になる
- 対象:
- サイドバー
- ログインフォームなど
- 保存先例:
- apps/<<appname>>/modules/<<modulename>>/templates/<<componentname>>
- apps/<<appname>>modules/<<modulename>>/actions/components.class.php
// apps/<<appname>>/modules/<<modulename>>/templates/<<componentname>> <?php include_component('<<modulename>>', '<<componentname>>', array('user' => $user)) ?>
<?php class <<modulename>>Components extends sfComponents { public function execute<<componentname>> { ... } } ?>
コンポーネントスロット(component_slot)
- 対象:
- コンポーネントに呼び出しのたびに変化するような場合に利用
- 呼び出し側は同じ場合でも、view.ymlによって呼び出すロジックを変更する
<? php include_component_slot('sidebar') ?>
// apps/<<appname>>/config/view.yml default: components: sidebar: [ menu, default ] default: components: sidebar: [menu, user ]
スロット(slot)
対象:
- 1回のレスポンスで部品化したい場合に、2度目以降をスロットとして利用できる
<?php slot('hoge') ?> hogehoge <?php end_slot() ?> <?php include_stlot('hoge') ?>
ややこしいが、テンプレートの部品化、リファクタリングを行っていくには必要な知識なので、習得しておきたいところ。