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