• []
  • []
  •  
  • del.icio.us 
  •  
  • Yahoo!֥åޡϿ 

symfony コンポーネントでパッケージ化する

PHP 求人 募集 Symfony CakePHP Smarty Ruby on Rails

symfony コンポーネントを利用する 概要

機能を丸ごとパッケージ化するのがコンポーネントの概念。
モジュールから設定ファイルを除いた位のサイズである。
パーシャル(partials)では一つのアクションを再利用する形だったが、 コンポーネント(components)ではコンポーネント(components)専用のクラスを作成する。

symfony コンポーネントを利用する

コンポーネント(components)専用クラスcomponents.class.phpを作成し、
sfComponentsを継承する。
/apps/myapp/modules/mymodule/actions/components.class.php

class newsComponents extends sfComponents
{
  public function executeHeadlines()
  {
    $c = new Criteria();
    $c->addDescendingOrderByColumn(NewsPeer::PUBLISHED_AT);
    $c->setLimit(5);
    $this->news = NewsPeer::doSelect($c);
  }
}

ビューは通常と同じようにアクションの数だけ作成する。
違いはファイル名の先頭に_(アンダーバー)をつける。
/apps/myapp/modules/mymodule/templates/_headlines.php

<div>
  <h1>Latest news</h1>
  <ul>
  <?php foreach($news as $headline): ?>
    <li>
      <?php echo $headline->getPublishedAt() ?>
      <?php echo link_to($headline->getTitle(),'news/show?id='.$headline->getId()) ?>
    </li>
  <?php endforeach ?>
  </ul>
</div>

呼び出しは別のビュープログラム上でinclude_component関数を使用する。

// Call to the component
<?php include_component('news', 'headlines', array('foo' => 'bar')) ?>
 
// In the component itself
echo $this->foo;
 => 'bar'
 
// In the _headlines.php partial
echo $foo;
 => 'bar'

framework/symfony/fragments/components.txt · 最終更新: 2007/06/29 08:17 by dozo