依存関係マネージャー
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'; // Enable APC for autoloading to improve performance. // You should change the ApcClassLoader first argument to a unique prefix // in order to prevent cache key conflicts with other applications // also using APC. /* $apcLoader = new ApcClassLoader(sha1(__FILE__), $loader); $loader->unregister(); $apcLoader->register(true); */ require_once __DIR__.'/../app/AppKernel.php'; //require_once __DIR__.'/../app/AppCache.php'; $kernel = new AppKernel('prod', false); $kernel->loadClassCache(); //$kernel = new AppCache($kernel); // When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter //Request::enableHttpMethodParameterOverride(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
app_dev.php
<?php use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Debug\Debug; // If you don't want to setup permissions the proper way, just uncomment the following PHP line // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information //umask(0000); // This check prevents access to debug front controllers that are deployed by accident to production servers. // Feel free to remove this, extend it, or make something more sophisticated. if (isset($_SERVER['HTTP_CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']) || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server') ) { header('HTTP/1.0 403 Forbidden'); exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); } $loader = require_once __DIR__.'/../app/bootstrap.php.cache'; Debug::enable(); require_once __DIR__.'/../app/AppKernel.php'; $kernel = new AppKernel('dev', true); $kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
パラメータ
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.md
github.com/symfony/symfony/blob/2.7/UPGRADE-2.2.md
github.com/symfony/symfony/blob/2.7/UPGRADE-2.3.md
github.com/symfony/symfony/blob/2.7/UPGRADE-2.4.md
github.com/symfony/symfony/blob/2.7/UPGRADE-2.5.md
github.com/symfony/symfony/blob/2.7/UPGRADE-2.6.md
symfony公式ドキュメント: symfony.com/doc/current/cookbook/index.html