この記事では、プロジェクトをレガシーSymfony 2.0から現在のSymfony 2.6に移行するために経験しなければならなかったいくつかのニュアンスについてお話したいと思います。
依存関係マネージャー
Symfonyの各プロジェクトには、独自の依存関係(バンドル)があります。 バージョン2.0では、依存関係はdepsファイルで指定され、次のコマンドでプルアップされました。
php bin/vendors install
これらの目的のために、Composerを使用することが重要です。
Composerをリポジトリのルートにダウンロードします。
php -r "readfile('https://getcomposer.org/installer');" | php
次に、プロジェクトルートに次の内容のcomposer.jsonファイルを作成します。
github.com/symfony/symfony/blob/2.6/composer.jsonそして、コマンドを実行します:
php composer.phar update
その後、Symfony 2.6は必要なすべての依存関係とともにプロジェクトに取り込まれ、composer.lockファイルが作成されます。このファイルには、ダウンロードされた依存関係の現在のバージョンが書き込まれます。
あとは、必要な依存関係をcomposer.jsonファイルに追加するだけです。 これは、ファイルを編集して手動で行うことができます。
"require": { "{ }":"{ }" },
または、次のコマンドを使用します。
php composer.phar require { }:{ }
必要なすべてのバンドルが揃ったので、depsおよびdeps.lockファイルを削除できますが、フレームワークが正常に機能するためには、web / app.phpおよびweb / app_dev.phpファイルも更新する必要があります。
app.php
<?php use Symfony\Component\ClassLoader\ApcClassLoader; use Symfony\Component\HttpFoundation\Request; $loader = require_once __DIR__.'/../app/bootstrap.php.cache';
app_dev.php
<?php use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Debug\Debug;
パラメータ
Symfony 2.0の場合、パラメーターはapp / config / parameters.iniファイルからロードされました。 必要なのは、app / config / parameters.ymlに名前を変更し、ymlファイルを次のようにすることです。
前:
[parameters] locale = en
後:
parameters: locale: en
それからapp / config / config.ymlにファイルのパスを書きます:
imports: - { resource: parameters.yml }
パラメーターが変更され、接続されました。
機能の後方互換性
バージョン2.0から2.6まで、かなり多くの変更が発生しましたが、そのうちのいくつかについてのみ説明したいと思います。
フォーム:
一部の関数は、既に送信されたフォームで使用された場合に例外をスローするようになりました。
add(), remove(), setParent(), bind() and setData()
これらは、フォームを送信する直前にformBuilderのリスナーから呼び出すか、フォームのロジックをわずかに変更できます。 ただし、一時的な手段として、次のコードを使用できます。
$formData = $form->getData(); $form = $this->createForm(new YourForm()); $form->setData($formData);
フォームを再作成し、古いフォームからすべてのパラメーターをフォームに渡した後、既に送信されたフォームで使用できなかったすべての関数を使用できます。
フォーム検証:
FormBulderの無効なCallbackValidationクラスを使用する代わりに、フォームが既に送信された後、つまりEventListenerを使用します。 POST_SUBMIT。
前:
$builder->addValidator(new CallbackValidator(function (FormInterface $form) { $value = $form['date']->getData(); if ($value != null) { $form['date']->addError(new FormError(' ')); } }));
後:
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { $form = $event->getForm(); $value = $form['date']->getData(); if ($value != null) { $form['date']->addError(new FormError(' ')); } });
フォームフィールドにオプションを追加する
フォームフィールドMyBundle \ Forms \ ExtensionExtensionForm.phpでオプションを作成するとき; これらのオプションが追加されるフィールドのタイプを示す必要があります。
public function getExtendedType() { return 'text'; }
すべてのタイプのフィールドにそれらを追加する場合は、次を指定する必要があります。
public function getExtendedType() { return 'form'; }
変更の完全なリスト
github.com/symfony/symfony/blob/2.7/UPGRADE-2.1.mdgithub.com/symfony/symfony/blob/2.7/UPGRADE-2.2.mdgithub.com/symfony/symfony/blob/2.7/UPGRADE-2.3.mdgithub.com/symfony/symfony/blob/2.7/UPGRADE-2.4.mdgithub.com/symfony/symfony/blob/2.7/UPGRADE-2.5.mdgithub.com/symfony/symfony/blob/2.7/UPGRADE-2.6.mdsymfony公式ドキュメント:
symfony.com/doc/current/cookbook/index.html