LoginSignup
10
7

More than 5 years have passed since last update.

はじめに

最近、Silex2.0で小さめのWebアプリを作る機会があり、[BC Break](後方互換性を壊す変更)がそれなりにあるなーという印象でしたので、ここに、まとめておきます。

Silex (1.2.4 => 2.0.2)変更点まとめ

Changelogはこちらを参照。

1.3.0 (2015-06-05)

  • PHP5.3.9以上
  • Symfony2.7, 2.8のサポート(2.3, 2.5, および 2.6 との互換性は維持)
    • PR #1097で詳細がわかる
    • $app['validator']Validatorクラス(非推奨)からRecursiveValidatorクラスに変更
    • $app['form.csrf_provider']Symfony\Component\Form\Extension\Csrf\CsrfProvider\DefaultCsrfProviderから Symfony\Component\Security\Csrf\CsrfTokenManagerに変更
  • TwigCoreExtensionクラスが削除、HttpFragmentServiceProviderの登録が必要に
  • $app['exception_handler']->disable()は非推奨。かわりにunset($app['exception_handler'])を使用

1.3.3 (2015-09-08)

  • Symfony 3.0 および Twig 2.0のサポート

2.0.0 (2016-05-18)

  • PHP5.5.0以上
  • Symfony2.8以上
  • Pimple1.1.1 => 3.0.2
  • CSRF機能はFormから切り離され、独立したプロバイダ(CsrfServiceProvider)に
  • ロケールの管理は、LocaleServiceProviderに集約
  • ServiceProviderInterfaceは、Pimple\ServiceProviderInterfaceに変更
    • bootメソッドは削除
    • registerメソッドの引数$appSilex\ApplicationからPimple\Containerに変更
  • $app['request']は削除、替わりに$app['request_stack']を使用

Pimple (1.1.1 => 3.0.2)変更点まとめ

Changelogはこちらを参照。

2.1.0 (2014-06-24)

  • Pimple\ServiceProviderInterfaceを追加

3.0.0 (2014-07-24)

  • Pimpleクラスを廃止、替わりにPimple\Containerを使用

    • shareメソッドが削除。替わりにcallableを直接代入する。
    $app['service'] = function () {
        return new Service();
    }
    

Symfony (2.6 => 3.0)変更点まとめ

UPGRADE FROM 2.6 to 2.7

UPGRADEガイドはこちら

Form

  • AbstractType(またはAbstractExtensionType)のsetDefaultOptionsが非推奨(deprecated)になり、 かわりにconfigureOptionsに変更
  • choicesのラベルと値が逆に。keyとvalueをひっくり返して、かつ、choices_as_valuestrueにする必要あり
  /** Before */
  $form->add('status', 'choice', array(
        'choices' => array(
             Status::ENABLED => 'Enabled',
             Status::DISABLED => 'Disabled',
             Status::IGNORED => 'Ignored',
        )),
));
  /** After */
  $form->add('status', 'choice', array(
        'choices' => array(
            'Enabled' => Status::ENABLED,
            'Disabled' => Status::DISABLED,
            'Ignored' => Status::IGNORED,
        ),
        'choices_as_values' => true,
        // important if you rely on your option value attribute (e.g. for JavaScript)
        // this will keep the same functionality as before
        'choice_value' => function ($choice) {
            return $choice;
        },
  ));

UPGRADE FROM 2.7 to 2.8

UPGRADEガイドはこちら

Form

  • csrf_providerオプションが非推奨に。かわりにcsrf_token_managerを使用
  • FormTypeを名前で指定するのが非推奨に。かわりにフル修飾クラス名(FQCN)を使用
  /** Before */
  $form = $this->createFormBuilder()
      ->add('name', 'text')
      ->add('age', 'integer')
      ->getForm();
  /** After */
  use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  use Symfony\Component\Form\Extension\Core\Type\TextType;

  $form = $this->createFormBuilder()
      ->add('name', TextType::class)
      ->add('age', IntegerType::class)
      ->getForm();
  • Form::add()FormBuilder::add() および FormFactory::create*() で、typeのインスタンスを渡すのは非推奨に。 かわりにフル修飾クラス名(FQCN)を使用

UPGRADE FROM 2.x to 3.0

UPGRADEガイドはこちら
以下、主に2.8からの差分について記載します。

Form

2.8までに非推奨だったものが軒並み削除されています。

  • cascade_validationオプションは削除
  • FormTypeの名前での指定が廃止。かわりにフル修飾クラス名(FQCN)を使用
  • FormTypeInterface::getName()が削除
  • setDefaultOptionsが削除。かわりにconfigureOptionsを使用
  • Form::bind() および Form::isBound()が削除。 かわりにForm::submit() および Form::isSubmitted()を使用
  • Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterfaceが削除。 かわりにSymfony\Component\Security\Csrf\CsrfTokenManagerInterfaceを使用
  • csrf_provider および intentionが削除。 かわりにcsrf_token_generator および csrf_token_idを使用
  • Form::getErrorsAsString() が削除。 かわりに、Form::getErrors(true, false)($deep = true, $flatten = false)を使用
  • choices_as_valuesが削除。choicesは ラベル => 値 の形式で指定

Validator

  • ValidatorInterfaceValidator\ValidatorInterfaceに移動
  • validateValue関数が削除。かわりにvalidate関数を使用
  /** Before */
  $validator->validate($object, 'Strict');

  $validator->validateValue($value, new NotNull());
  /** After */
  $validator->validate($object, null, 'Strict');

  $validator->validate($value, new NotNull());

おわりに

Silex2.0についての所感をざっと、過剰書きにします。

  • 大きなパフォーマンス改善や機能追加は見当たらない
  • Silex自体はmicro frameworkなので、利用しているコンポーネントの変更に影響を受ける
  • 正直、Symfony2.8、3.0に対応しただけという印象
  • Formコンポーネント、ユーザーにメリットない変更多すぎ

とはいえ、Silex1.2は、Symfony2.6までしかサポートしません。
Symfony2.6は、2016/01にサポート切れてしまっていますので、何らかマイグレーション考えましょう。

個人的には、Silex1.2から2.0だったら、Symfonyに限らず他のフレームワークへのマイグレーションを検討してもいいのではと考えています。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7