Symfony2のいいところ(シンプルな点)

参考:

OSC Nagoya、Tokyo/FallでSymfonyユーザー会枠のセミナーの一部を担当する予定ですが、そこでSymfony2の紹介をやろうと思い、プレビューリリース2のキャッシュ機能を試しています。

ただ、まだSymfony2のキャッシュ機能については公式サイトにもドキュメントがなく、fabienさんのスライドにあるコードとSymfony2のソースコードを見ながら手探りで動かしているような状態です。

とりあえずSymfony2の目玉機能と言われて登場したHTTPアクセラレーターのキャッシュ機能については、プレビューリリース2のサンドボックスでなんとか動作させることができました。この方法については時間があれば別エントリにまとめたいと思います。

今回はそれとは別に、Symfony2で「これはいいな」と思った点のうち、「シンプルな点」について自分用メモとしてまとめておきます。

パーシャルやコンポーネントといった個別の概念の廃止

symfony 1.xでは、ビュー内の部品を扱う方法が「パーシャル」「コンポーネント」とありました。

  • パーシャル:ビューのコード片
  • コンポーネント:アクションとビューで1まとまりとなったコード片

「ビュー」と合わせて、合計3種類の概念で構成されていました。

Symfony2では、(2010年7月16日時点では)このような概念はなく、すべて「アクション」と「ビュー」のみで構成されています。

参考:

Symfony2のビューに関する処理

上記参考ページに記載されていますが、例えば以下のようになっています。

●アクションからビューをレンダリング

<?php
// バンドル内のテンプレートとパラメータを指定してrender
return $this->render('HelloBundle:Hello:index', array('name' => $name));

●ビューから別のビューをインクルード(symfony 1.xでのパーシャル)

<?php
// バンドル内のテンプレートとパラメータを指定してrender(ビュー内の特別オブジェクト$viewのメソッド)
echo $view->render('HelloBundle:Hello:foo', array('name' => $name));

●ビューから別のアクションの結果をインクルード(symfony 1.xでのコンポーネント

<?php
// バンドル内のアクションとパラメータを指定してoutput(ビュー内の特別オブジェクト$view->actionsのメソッド)
$view->actions->output('HelloBundle:Hello:bar', array('name' => $name));


#output()は、render()した結果をechoするだけのメソッドで、どちらを使ってもよいようです。

このように、すべてがアクションとビューという処理に統一されているので、非常にすっきりしたと思います。

その他のシンプルな点

その他多少いじっていて気づいた部分

  • キャッシュの設定がconfigじゃなくなる?(まだできていないだけかもしれません)
  • ビューのファイル名がシンプル(〜Successとか面倒だったので)

あと、Fivestarさんのエントリにも書かれていますが、アクションの戻り値がResponseオブジェクトだという点は、こういったフレームワークではちょっと珍しいような気がします。
ですが、使ってみると、構造がとてもシンプルになって、何か処理をカスタマイズしたい場合のハードルもかなり低くなるんじゃないかと思います。


# その分、フレームワーク内部の構造は、最初はややとっつきづらくなっているかもしれません。