2013年6月4日火曜日

Symfony2.1から2.2へのアップデート

Symfony2.3.0のリリースおめでとうございます

2.3系はSymfony2はじめてのLTS(Long Term Support Release)で、今後3年間のメンテナンス期間が設定されています。 LTSは魅力的なのですが、βのころからコミットを追いかけていたわけではない私は、まだ公開サービスを2.3に移行するには早いと判断して、 ひとまず2.1のプロジェクトを2.2にアップデートしてみようとやってみました。

基本的な作業は

  1. composerでcreate-project
  2. composer.jsonにプロジェクト独自のパッケージを追加して、composer updateを通す
  3. 既存プロジェクトのvendor参照先をできあがったvendorに変更する
  4. app/config/config*.ymlの差分を確認、反映
  5. app/AppKernel.phpの差分を確認、反映

ここまでやって、php app/consoleを実行すればデバッグ環境なのでapp/cache以下がごそっと作成されます。 Symfonyをお使いの方であれば、php app/consoleでヘルプが表示されればひと安心!という気持ち、わかっていただけるかと思います。

すんなり移行できると思いきや

ところが、エラーハンドリングのカスタマイズをしていたところでエラー発生。 src/Symfony/Bundle/TwigBundle/Controller/ExceptionController.phpを継承してクラスを作成して、それをconfig.ymlの
twig:
    exception_controller: Foo\Bundle\Controller\ExceptionController::showAction
    ...
で指定していたのですが、showActionのプロトタイプが変わっているようでした。

githubの差分を見てみたところ、ContainerAwareを継承しないController、つまりController as a Serviceに変更されていました。

新版のshowActionにプロトタイプをあわせて、いままでContainerAwareを継承していたため使えた$this->get('xxxx')をすべてコンストラクタで注入するようにして動作するようになりました。ここいらの設定は普通のサービスと変わりません。

ライブラリやフレームワークをアップデートしてアタリがある箇所ってたいてい、既存のインターフェースをimplementsしてたり、クラスをextendsしていたりすることが多いですね。

まとめ

  • Symfony2.2以降、標準のExceptionControllerはController as a serviceとなり、リクエストを注入しレスポンスを返すサービスになった

0 件のコメント:

コメントを投稿