symfony1.4.9でのテンプレートコード リファクタリング

2011年5月21日 オフ 投稿者: KYO
Table of Contents

突貫で作業していると、案外車輪を何度も作ってます。

ある程度作業が進むと、リファクタリングを心がけてはいますが、テンプレートコードの再利用に関しては、なかなか複雑。

そこで、一旦まとめてみることにしました。

 

  • インクルード(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]

 

 

ややこしいが、テンプレートの部品化、リファクタリングを行っていくには必要な知識なので、習得しておきたいところ。