Silexを1.3系から2.0系にアップグレードしたメモ #php #silex version 2

2016/06/18 15:52 by hiro_y hiro_y
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
Silexを1.3系から2.0系にアップグレードしたメモ #php #silex
Silex 1.3系から2.0系にアップグレードしたのでメモ。
内部で使われているDIコンテナであるPimpleのバージョンが3系になったのが大きな変化。
[Silex](http://silex.sensiolabs.org/) 1.3系から2.0系にアップグレードしたのでメモ。
内部で使われているDIコンテナである[Pimple](http://pimple.sensiolabs.org/)のバージョンが3系になったのが大きな変化。

## serviceクラスのコンテナへの登録方法が変わった

[Services - Documentation - Silex - The PHP micro-framework based on the Symfony Components](http://silex.sensiolabs.org/doc/master/services.html)

```php
// 1.3まで $app['xxx'] = $app->share(function () use ($app) { /* 返す */ };
$app['xxx'] = function () use ($app) { /* 返す */ };
```

今まで同一のインスタンスを取得するために`share`を書いていたが、いちいち書かなくてよくなった。`share`はメソッドごとなくなった。

## ServiceProviderの仕組みが変わった

[Providers - Documentation - Silex - The PHP micro-framework based on the Symfony Components](http://silex.sensiolabs.org/doc/master/providers.html)

今まで`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](http://silex.sensiolabs.org/doc/master/usage.html#error-handlers)

```php
// 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`がなくなった

なくなった。

      

Silex 1.3系から2.0系にアップグレードしたのでメモ。
内部で使われているDIコンテナであるPimpleのバージョンが3系になったのが大きな変化。

serviceクラスのコンテナへの登録方法が変わった

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はメソッドごとなくなった。

ServiceProviderの仕組みが変わった

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']がなくなった

今までだと$appSymfony\Component\HttpFoundation\Requestのインスタンスが格納されていたのだけれど、入らなくなった。今のコードをできるだけ変えたくないのであれば、自分でbeforeフィルターの中などで格納しておく必要がある。

Silex\Provider\UrlGeneratorServiceProviderがなくなった

なくなった。