Silex 1.3系から2.0系にアップグレードしたので、自分が使っている範囲で気が付いたことをメモ。内部で使われているDIコンテナであるPimpleのバージョンが3系になったのが一番大きな変化。
Services - Documentation - Silex - The PHP micro-framework based on the Symfony Components
// 1.3まで $app['xxx'] = $app->share(function () use ($app) { /* 返す */ };
$app['xxx'] = function () use ($app) { /* 返す */ };
今まで同一のインスタンスを取得するためにshare
を書いていたが、いちいち書かなくてよくなった。share
はメソッドごとなくなった。
Providers - Documentation - Silex - The PHP micro-framework based on the Symfony Components
今までSilex\ServiceProviderInterface
を実装していたのがPimple\ServiceProviderInterface
を実装するように変わった。またregister
メソッドの引数もSilex\Application
からPimple\Container
に変わった。
さらにboot
メソッドを実装していた場合はSilex\Api\BootableProviderInterface
の実装として行うこととなった(こちらの引数はSilex\Application
のまま変わらず)。
もちろん、2つのインターフェースを1つのクラスで実装すれば1.3系のころと同じように使える。
Usage - Documentation - Silex - The PHP micro-framework based on the Symfony Components
// 1.3まで $app->error(function (\Exception $e, $code) {
$app->error(function (\Exception $e, Request $request, $code) {
エラーハンドラーにSymfony\Component\HttpFoundation\Request
のインスタンスが渡るようになった。エラーハンドラー内でステータスコードで処理を分岐させていた場合、今までコードが渡っていた位置にRequest
にインスタンスが渡ってくるのでうまく動かなくなるので注意。
$app['request']
がなくなった今までだと$app
にSymfony\Component\HttpFoundation\Request
のインスタンスが格納されていたのだけれど、入らなくなった。今のコードをできるだけ変えたくないのであれば、自分でbefore
ミドルウェアの内部などで格納しておく必要がある。
Silex\Provider\UrlGeneratorServiceProvider
がなくなったなくなった。