コンポーネントやパーシャルの呼び出しが便利になっている件

多用することがいいかどうかは別として、symfony1.1からはコントローラー内から簡単にパーシャルやコンポーネントのレンダー結果を取得することができるようになりました。

つまり、次のようなメソッドが用意されたということです。

// in action
public function executeIndex($request)
{
  // なんか処理
  $component_result = $this->getComponent('モジュール名', 'コンポーネント名', array('渡したい変数'));
  $partial_result = $this->getPartial('テンプレート名', array('渡したい変数'));
}

一番の使い道はメールの本文をテンプレートを使って作成する方法でしょうね。
今までは別のアクションにforwardさせたりしないと分離できないという悲しい方法しかありませんでしたがこれですっきりできます。万歳。


また、テンプレートを共通化するという方法でも利用場面はありそうです。この場合レンダーの結果を変数ではなく出力するメソッド(renderComponent, renderPartial)も用意されているのでこれらを使うと便利です。

たとえば、Ajaxで同じ部品を何度も再描画するような場面ではコンポーネントを作っておいてテンプレートからは

// in template
<?php include_component('ajax', 'update') ?>

としておき、Ajaxでリクエストされるアクションでは

// in action
public function executeUpdate($request)
{
 return $this->renderComponent('ajax', 'update');
}

とすれば簡単に処理をコンポーネントに共通化できスッキリします。

また、symfony1.1からはアクションにある実行メソッドには引数として$requestを常に渡すようになりました。
これはコンポーネントの実行メソッドでも同様ですので、コンポーネントでsfRequestオブジェクトにアクセスするのはこれを使うようにすることをお忘れなく。

// in template
<?php include_component('ajax', 'update') ?>

// in component
public function executeUpdate($request)
{
  $hoge = $reuqest->getParameter('hoge');
}

このようにsymfony1.0系で不満だった部分が解消されています。