vendor/symfony/UPDATE.ja.md
changeset 0 7f95f8617b0b
equal deleted inserted replaced
-1:000000000000 0:7f95f8617b0b
       
     1 プロジェクトをアップデートする方法
       
     2 ==================================
       
     3 
       
     4 このドキュメントでは、Symfony2 の特定のバージョンから1つ次のバージョンへアップデートする方法を説明します。
       
     5 このドキュメントでは、フレームワークの "パブリックな" APIを使っている場合に必要な変更点についてのみ説明しています。
       
     6 フレームワークのコアコードを "ハック" している場合は、変更履歴を注意深く追跡する必要があるでしょう。
       
     7 
       
     8 RC4 から RC5
       
     9 ------------
       
    10 
       
    11 * `MapFileClassLoader` は削除され `MapClassLoader` が採用されました。
       
    12 
       
    13 * `exception_controller` の設定は、 `framework` セクションの `twig` へ移動しました。
       
    14 
       
    15 * カスタムエラーページは、現在 `TwigBundle` の代わりに `FrameworkBundle` を参照する必要があります。(参照 http://symfony.com/doc/2.0/cookbook/controller/error_pages.html)
       
    16 
       
    17 * `EntityUserProvider` クラスは Bridge へ移動されました。
       
    18   FQCN は `Symfony\Component\Security\Core\User\EntityUserProvider` から
       
    19   `Symfony\Bridge\Doctrine\Security\User\EntityUserProvider` に変更になります。
       
    20 
       
    21 * `HeaderBag` からの Cookie アクセスが削除されました。
       
    22   リクエスト Cookie へのアクセスには、`Request::$cookies` を使ってください。
       
    23 
       
    24 * `ResponseHeaderBag::getCookie()` メソッドと `ResponseHeaderBag::hasCookie()` メソッドは削除されました。
       
    25 
       
    26 * `ResponseHeaderBag::getCookies()` メソッドの引数で、戻り値のフォーマットを指定できるようになりました。指定できる値は `ResponseHeaderBag::COOKIES_FLAT` (デフォルト値) または `ResponseHeaderBag::COOKIES_ARRAY` です。
       
    27 
       
    28     * `ResponseHeaderBag::COOKIES_FLAT` を指定すると、戻り値は単純な配列になります(配列のキーは、Cookie の名前ではなくなります):
       
    29 
       
    30         * array(0 => `Cookie インスタンス`, 1 => `別の Cookie インスタンス`)
       
    31 
       
    32     * `ResponseHeaderBag::COOKIES_ARRAY` を指定すると、戻り値は多次元配列になります:
       
    33 
       
    34         * array(`ドメイン` => array(`パス` => array(`Cookie 名` => `Cookie インスタンス`)))
       
    35 
       
    36 * 制約は有効となったキーのみを保持し、その値は保持していないため、Choice 制約の推測クラス(Guesser)は削除されました。
       
    37 
       
    38 * MonologBundle の設定のリファクタリングが行われました。
       
    39 
       
    40     * プロセッサでサポートされるのは、サービスのみです。このサービスは `monolog.processor` タグを使って登録します。次の 3 つの属性を指定できます:
       
    41 
       
    42         * `handler`: 特定のハンドラーのみに対して登録する場合、そのハンドラーの名前
       
    43         * `channel`: 特定のロギングチャンネルのみに対して登録する場合のチャンネル (`handler` とどちらか一方のみを指定)
       
    44         * `method`: レコードの処理に使用するメソッド (指定しない場合は `__invoke` が使われます)
       
    45 
       
    46     * `SwiftMailerHandler` の email_prototype 設定に指定できるのは、サービスのみです。
       
    47 
       
    48         * 変更前:
       
    49 
       
    50             email_prototype: @acme_demo.monolog.email_prototype
       
    51 
       
    52         * 変更後:
       
    53 
       
    54             email_prototype: acme_demo.monolog.email_prototype
       
    55 
       
    56           もしくは、次のようにしてプロトタイプ用のファクトリを使うこともできます:
       
    57 
       
    58             email_prototype:
       
    59                 id:     acme_demo.monolog.email_prototype
       
    60                 method: getPrototype
       
    61 
       
    62 * セキュリティを考慮し、プロキシ由来の HTTP ヘッダー (`HTTP_X_FORWARDED_FOR`、`X_FORWARDED_PROTO`、`X_FORWARDED_HOST` 等) は、デフォルトでは信頼されなくなりました。リバースプロキシ経由でアプリケーションを利用する構成の場合は、次のように設定してください:
       
    63 
       
    64         framework:
       
    65             trust_proxy_headers: true
       
    66 
       
    67 * 意図しない名前の衝突を避けるため、AbstractType によるフォームタイプ名の自動定義は行われなくなりました。カスタムタイプを作成する場合は、明示的に `getName()` メソッドを実装する必要があります。
       
    68 
       
    69 RC3 から RC4
       
    70 ------------
       
    71 
       
    72 * Annotation クラスには、@Annotation を付加してください。
       
    73   (例については Validator コンポーネントの制約クラスを参照してください)
       
    74 
       
    75 * アノテーションのオートロードには、PHP の機構ではなく独自の機構が使われるように変更されました。
       
    76   これにより、失敗の状態についてより制御できるようになりました。
       
    77   コードを動作させるようにするには、`autoload.php` ファイルの末尾に次のコードを追加してください:
       
    78 
       
    79         use Doctrine\Common\Annotations\AnnotationRegistry;
       
    80 
       
    81         AnnotationRegistry::registerLoader(function($class) use ($loader) {
       
    82             $loader->loadClass($class);
       
    83             return class_exists($class, false);
       
    84         });
       
    85 
       
    86         AnnotationRegistry::registerFile(
       
    87             __DIR__.'/../vendor/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'
       
    88         );
       
    89 
       
    90   `$loader` 変数は `UniversalClassLoader` のインスタンスです。
       
    91   また、ORM のパスを `DoctrineAnnotations.php` に変更しなければいけない場合もあります。
       
    92   `UniversalClassLoader` を使っていない場合、アノテーションの登録の詳細については、[Doctrine アノテーションドキュメント](http://www.doctrine-project.org/docs/common/2.1/en/reference/annotations.html) を参照してください。
       
    93 
       
    94 beta5 から RC1
       
    95 --------------
       
    96 
       
    97 * `Symfony\Bundle\FrameworkBundle\Command\Command` クラスの名前が
       
    98   `Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand` に変更されました。
       
    99 
       
   100 * ルーティングの `AnnotGlobLoader` クラスが削除されました。
       
   101 
       
   102 * Twig フォームテンプレートのいくつかのブロックの名前は、衝突を避けるために変更されました。
       
   103 
       
   104     * `container_attributes` から `widget_container_attributes`
       
   105     * `attributes` から `widget_attributes`
       
   106     * `options` から `widget_choice_options`
       
   107 
       
   108 * イベントの変更:
       
   109 
       
   110     * すべてのリスナーには、`kernel.listener` タグではなく `kernel.event_listener` タグを設定する必要があります。
       
   111     * カーネルイベントのプレフィックスが `core` から `kernel` に変更されました:
       
   112 
       
   113         * 変更前:
       
   114 
       
   115                 <tag name="kernel.listener" event="core.request" method="onCoreRequest" />
       
   116 
       
   117         * 変更後:
       
   118 
       
   119                 <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
       
   120 
       
   121         Note: メソッド名 method 属性で独立して指定できるので、`onCoreRequest` のままでも動作しますが、将来的な一貫性のためにイベント名に合わせたメソッド名に変更しておく方がよいでしょう。
       
   122 
       
   123     * `Symfony\Component\HttpKernel\CoreEvents` クラスの名前が
       
   124       `Symfony\Component\HttpKernel\KernelEvents` に変更されました。
       
   125 
       
   126 * `TrueValidator` と `FalseValidator` の受け付ける値をより限定しました。
       
   127 
       
   128 beta4 から beta5
       
   129 ----------------
       
   130 
       
   131 * `UserProviderInterface::loadUser()` メソッドの名前は、メソッドの目的がより明確になるよう、`UserProviderInterface::refreshUser()` に変更されました。
       
   132 
       
   133 * `WebTestCase` クラスの `$kernel` プロパティは static に変更されました。
       
   134   ファンクショナルテスト内で `$this->kernel` を使っている箇所は、`self::$kernel` に変更してください。
       
   135 
       
   136 * AsseticBundle は独立したリポジトリで管理されるようになりました(Symfony2 Standard Edition にはバンドルされています)。
       
   137 
       
   138 * Yaml コンポーネントの変更:
       
   139 
       
   140     * Exception クラスは独自の名前空間へ移動されました。
       
   141     * `Yaml::load()` メソッドの名前は `Yaml::parse()` に変更されました。
       
   142 
       
   143 * `HttpFoundation` コンポーネントの `File` クラスのリファクタリング:
       
   144 
       
   145     * `Symfony\Component\HttpFoundation\File\File` の API が新しくなりました。
       
   146 
       
   147        * `\SplFileInfo` を継承するようになりました
       
   148 
       
   149            * `getName()` は `getBasename()` に変更
       
   150            * `getDirectory()` は `getPath()` に変更
       
   151            * `getPath()` は `getRealPath()` に変更
       
   152 
       
   153        * `move()` メソッドを呼び出した時に、対象ディレクトリがまだ存在していない場合は作成されるようになりました。
       
   154 
       
   155        * `getExtension()` と `guessExtension()` の戻り値の拡張子から、先頭の `.` が除去されるように変更されました。
       
   156 
       
   157     * `Symfony\Component\HttpFoundation\File\UploadedFile` の API が新しくなりました。
       
   158 
       
   159         * コンストラクタに真偽値の引数が追加されました。
       
   160           この引数に true を指定すると、ファイルを移動できるようになりますが、テストモード以外では true に設定しないでください。
       
   161           コアファイル以外の外部から true に設定することは想定していません。
       
   162 
       
   163         * `getMimeType()` は、対象ファイルの MIME タイプを必ず返すように変更されました。
       
   164            リクエストから MIME タイプを取得する場合は、`getClientMimeType()` メソッドを使ってください。
       
   165 
       
   166         * `getSize()` は、対象ファイルのサイズを必ず返すように変更されました。
       
   167            リクエストからファイルサイズを取得する場合は、`getClientSize()` メソッドを使ってください。
       
   168 
       
   169         * リクエストからオリジナルのファイル名を取得する場合は、`getClientOriginalName()` メソッドを使ってください。
       
   170 
       
   171 * Twig の `extensions` 設定は削除されました。
       
   172   Twig エクステンションを登録する場合は、`twig.extension` タグを使ってください。
       
   173 
       
   174 * Monolog ハンドラのスタックで、デフォルトで記録が伝播されるようになりました。
       
   175   伝播されないようにするには、bubble を明示的に false に設定してください。
       
   176 
       
   177 * `SerializerInterface` が拡張されました。
       
   178   Serializer クラスのパブリックメソッドの数は減りましたが、後方互換性が損なわれ、コンポーネント独自の Exception クラスが追加されました。
       
   179 
       
   180 * `FileType` フォームクラスが大きく変更されました。
       
   181 
       
   182     * テンポラリストレージが削除されました。
       
   183 
       
   184     * FileType の `type` オプションが削除されました。
       
   185       新しい動作は、以前の `type` に `file` を設定した場合の動作と同じです。
       
   186 
       
   187     * ファイルウィジェットは、他の INPUT フィールドと同じようにレンダリングされるように変更されました。
       
   188 
       
   189 * Doctrine の `EntityType` クラスコンストラクタの `em` 引数には、EntityManager インスタンスの代わりにエンティティマネージャー名を指定するよう変更されました。
       
   190   このオプションをを渡さない場合、以前と同じようにデフォルトのエンティティマネージャーが使われます。
       
   191 
       
   192 * Console コンポーネントの中の `Command::getFullname()` メソッドと `Command::getNamespace()` メソッドは削除されました
       
   193   (`Command::getName()` メソッドの振る舞いは以前の `Command::getFullname()` メソッドと同じになりました)。
       
   194 
       
   195 * デフォルトの Twig フォームテンプレートは Twig bridge に移動されました。以下のようにすればテンプレートや
       
   196   コンフィギュレーション設定中で現在Twig フォームテンプレートを参照できます:
       
   197 
       
   198     変更前:
       
   199 
       
   200         TwigBundle:Form:div_layout.html.twig
       
   201 
       
   202     変更後:
       
   203 
       
   204         form_div_layout.html.twig
       
   205 
       
   206 * キャッシュウォーマーに関連する設定は、すべて削除されました。
       
   207 
       
   208 * `Response::isRedirected()` メソッドは `Response::isRedirect()` メソッドに統合されました。
       
   209 
       
   210 beta3 から beta4
       
   211 ----------------
       
   212 
       
   213 * `Profile` のインスタンスを返す `Client::getProfile()` メソッドへの変更に従い、`Client::getProfiler()` メソッドは削除されました。
       
   214 
       
   215 * いくつかの `UniversalClassLoader` のメソッド名は変更されました:
       
   216 
       
   217     * `registerPrefixFallback` から `registerPrefixFallbacks`
       
   218     * `registerNamespaceFallback` から `registerNamespaceFallbacks`
       
   219 
       
   220 * イベントシステムはさらに柔軟になりました。リスナーは任意の有効でコール可能な PHP 関数であれば可能になりました。
       
   221 
       
   222     * `EventDispatcher::addListener($eventName, $listener, $priority = 0)`:
       
   223         * `$eventName` がイベント名で (もう配列ではいけません)、
       
   224         * `$listener` が コール可能な PHP 関数です。
       
   225 
       
   226     * イベントクラス名と定数が変更されました:
       
   227 
       
   228         * 以前の `Symfony\Component\Form\Events` のクラス名と定数:
       
   229 
       
   230                 Events::preBind = 'preBind'
       
   231                 Events::postBind = 'postBind'
       
   232                 Events::preSetData = 'preSetData'
       
   233                 Events::postSetData = 'postSetData'
       
   234                 Events::onBindClientData = 'onBindClientData'
       
   235                 Events::onBindNormData = 'onBindNormData'
       
   236                 Events::onSetData = 'onSetData'
       
   237 
       
   238         * 新しい `Symfony\Component\Form\FormEvents` クラス名と定数:
       
   239 
       
   240                 FormEvents::PRE_BIND = 'form.pre_bind'
       
   241                 FormEvents::POST_BIND = 'form.post_bind'
       
   242                 FormEvents::PRE_SET_DATA = 'form.pre_set_data'
       
   243                 FormEvents::POST_SET_DATA = 'form.post_set_data'
       
   244                 FormEvents::BIND_CLIENT_DATA = 'form.bind_client_data'
       
   245                 FormEvents::BIND_NORM_DATA = 'form.bind_norm_data'
       
   246                 FormEvents::SET_DATA = 'form.set_data'
       
   247 
       
   248         * 以前の `Symfony\Component\HttpKernel\Events` のクラス名と定数:
       
   249 
       
   250                 Events::onCoreRequest = 'onCoreRequest'
       
   251                 Events::onCoreException = 'onCoreException'
       
   252                 Events::onCoreView = 'onCoreView'
       
   253                 Events::onCoreController = 'onCoreController'
       
   254                 Events::onCoreResponse = 'onCoreResponse'
       
   255 
       
   256         * 新しい `Symfony\Component\HttpKernel\CoreEvents` のクラス名と定数:
       
   257 
       
   258                 CoreEvents::REQUEST = 'core.request'
       
   259                 CoreEvents::EXCEPTION = 'core.exception'
       
   260                 CoreEvents::VIEW = 'core.view'
       
   261                 CoreEvents::CONTROLLER = 'core.controller'
       
   262                 CoreEvents::RESPONSE = 'core.response'
       
   263 
       
   264         * 以前の `Symfony\Component\Security\Http\Events` のクラス名と定数:
       
   265 
       
   266                 Events::onSecurityInteractiveLogin = 'onSecurityInteractiveLogin'
       
   267                 Events::onSecuritySwitchUser = 'onSecuritySwitchUser'
       
   268 
       
   269         * 新しい `Symfony\Component\Security\Http\SecurityEvents` のクラス名と定数:
       
   270 
       
   271                 SecurityEvents::INTERACTIVE_LOGIN = 'security.interactive_login'
       
   272                 SecurityEvents::SWITCH_USER = 'security.switch_user'
       
   273 
       
   274     * `addListenerService` は第 1 引数として単一のイベント名だけを取るようになりました。
       
   275 
       
   276     * コンフィギュレーションのタグでは、呼び出すメソッドを指定する必要があります。
       
   277 
       
   278         * 変更前:
       
   279 
       
   280                 <tag name="kernel.listener" event="onCoreRequest" />
       
   281 
       
   282         * 変更後:
       
   283 
       
   284                 <tag name="kernel.listener" event="core.request" method="onCoreRequest" />
       
   285 
       
   286     * Subscriber は常に連想配列を返すようになりました:
       
   287 
       
   288         * 変更前:
       
   289 
       
   290                 public static function getSubscribedEvents()
       
   291                 {
       
   292                     return Events::onBindNormData;
       
   293                 }
       
   294 
       
   295         * 変更後:
       
   296 
       
   297                 public static function getSubscribedEvents()
       
   298                 {
       
   299                     return array(FormEvents::BIND_NORM_DATA => 'onBindNormData');
       
   300                 }
       
   301 
       
   302 * フォーム `DateType` パラメーターの `single-text` は `single_text` へ変更されました
       
   303 * フォームフィールドラベルヘルパーは属性の設定も受け入れるようになりました。例 :
       
   304 
       
   305 ```html+jinja
       
   306 {{ form_label(form.name, 'Custom label', { 'attr': {'class': 'name_field'} }) }}
       
   307 ```
       
   308 
       
   309 * Swiftmailer を使うためには、autoloader ("app/autoloader.php") を通して "init.php" を登録し、
       
   310   `Swift_` prefix の登録を autoloader から削除しなければなりません。これをどのように行うべきかの例は、
       
   311   Standard Distribution をご覧ください。
       
   312   [autoload.php](https://github.com/symfony/symfony-standard/blob/v2.0.0BETA4/app/autoload.php#L29).
       
   313 
       
   314 beta2 から beta3
       
   315 ----------------
       
   316 
       
   317 * `framework.annotations` に属する設定が少し変更されました。
       
   318 
       
   319     変更前:
       
   320 
       
   321         framework:
       
   322             annotations:
       
   323                 cache: file
       
   324                 file_cache:
       
   325                     debug: true
       
   326                     dir: /foo
       
   327 
       
   328     変更後:
       
   329 
       
   330         framework:
       
   331             annotations:
       
   332                 cache: file
       
   333                 debug: true
       
   334                 file_cache_dir: /foo
       
   335 
       
   336 beta1 から beta2
       
   337 ----------------
       
   338 
       
   339 * アノテーションのパース処理が変更され、Doctrine Common 3.0 を利用するようになりました。
       
   340   クラス内で使うアノテーションは、インポートする必要があります(`use` で PHP の名前空間をインポートするのと同様です)。
       
   341 
       
   342   変更前:
       
   343 
       
   344 ``` php
       
   345 <?php
       
   346 
       
   347 /**
       
   348  * @orm:Entity
       
   349  */
       
   350 class AcmeUser
       
   351 {
       
   352     /**
       
   353      * @orm:Id
       
   354      * @orm:GeneratedValue(strategy = "AUTO")
       
   355      * @orm:Column(type="integer")
       
   356      * @var integer
       
   357      */
       
   358     private $id;
       
   359 
       
   360     /**
       
   361      * @orm:Column(type="string", nullable=false)
       
   362      * @assert:NotBlank
       
   363      * @var string
       
   364      */
       
   365     private $name;
       
   366 }
       
   367 ```
       
   368   変更後:
       
   369 
       
   370 ``` php
       
   371 <?php
       
   372 
       
   373 use Doctrine\ORM\Mapping as ORM;
       
   374 use Symfony\Component\Validator\Constraints as Assert;
       
   375 
       
   376 /**
       
   377  * @ORM\Entity
       
   378  */
       
   379 class AcmeUser
       
   380 {
       
   381     /**
       
   382      * @ORM\Id
       
   383      * @ORM\GeneratedValue(strategy="AUTO")
       
   384      * @ORM\Column(type="integer")
       
   385      *
       
   386      * @var integer
       
   387      */
       
   388     private $id;
       
   389 
       
   390     /**
       
   391      * @ORM\Column(type="string", nullable=false)
       
   392      * @Assert\NotBlank
       
   393      *
       
   394      * @var string
       
   395      */
       
   396     private $name;
       
   397 }
       
   398 ```
       
   399 
       
   400 * `Set` 制約の記述が変更され、必要なくなったため削除されました。
       
   401 
       
   402 変更前:
       
   403 
       
   404 ``` php
       
   405 <?php
       
   406 
       
   407 /**
       
   408  * @orm:Entity
       
   409  */
       
   410 class AcmeEntity
       
   411 {
       
   412     /**
       
   413      * @assert:Set({@assert:Callback(...), @assert:Callback(...)})
       
   414      */
       
   415     private $foo;
       
   416 }
       
   417 ```
       
   418 変更後:
       
   419 
       
   420 ``` php
       
   421 <?php
       
   422 
       
   423 use Doctrine\ORM\Mapping as ORM;
       
   424 use Symfony\Component\Validator\Constraints\Callback;
       
   425 
       
   426 /**
       
   427  * @ORM\Entity
       
   428  */
       
   429 class AcmeEntity
       
   430 {
       
   431     /**
       
   432      * @Callback(...)
       
   433      * @Callback(...)
       
   434      */
       
   435     private $foo;
       
   436 }
       
   437 ```
       
   438 
       
   439 * `framework.validation.annotations` に属するコンフィギュレーションは削除され、`framework.validation.enable_annotations` の真偽値に置き換えられました(デフォルトでは `false` です)。
       
   440 
       
   441 * フォームを使う場合は、明示的に有効化するよう変更されました(Symfony Standard Edition のコンフィギュレーションではデフォルトで有効に設定されています)。
       
   442 
       
   443         framework:
       
   444             form: ~
       
   445 
       
   446     これは、次のように記述しても同じです。
       
   447 
       
   448         framework:
       
   449             form:
       
   450                 enabled: true
       
   451 
       
   452 * Routing コンポーネントの例外を移動しました。
       
   453 
       
   454     変更前:
       
   455 
       
   456         Symfony\Component\Routing\Matcher\Exception\Exception
       
   457         Symfony\Component\Routing\Matcher\Exception\NotFoundException
       
   458         Symfony\Component\Routing\Matcher\Exception\MethodNotAllowedException
       
   459 
       
   460     変更後:
       
   461 
       
   462         Symfony\Component\Routing\Exception\Exception
       
   463         Symfony\Component\Routing\Exception\NotFoundException
       
   464         Symfony\Component\Routing\Exception\MethodNotAllowedException
       
   465 
       
   466 * Form コンポーネントの `csrf_page_id` オプションの名前は、`intention` に変更されました。
       
   467 
       
   468 * `error_handler` の設定が削除されました。`ErrorHandler` クラスは Symfony Standard Edition の `AppKernel` で直接管理されるように変更されました。
       
   469 
       
   470 * Doctrine のメタデータ用のディレクトリが、`Resources/config/doctrine/metadata/orm/` から `Resources/config/doctrine` に変更され、各ファイルの拡張子が `.dcm.yml` から ``.orm.yml`` に変更されました。
       
   471   また、ファイル名は短いクラス名のみに変更されました。
       
   472 
       
   473     変更前:
       
   474 
       
   475         Resources/config/doctrine/metadata/orm/Bundle.Entity.dcm.xml
       
   476         Resources/config/doctrine/metadata/orm/Bundle.Entity.dcm.yml
       
   477 
       
   478     変更後:
       
   479 
       
   480         Resources/config/doctrine/Entity.orm.xml
       
   481         Resources/config/doctrine/Entity.orm.yml
       
   482 
       
   483 * 新しい Doctrine Registry クラスの導入により、次のパラメータは削除されました(`doctrine` サービスのメソッドに置き換えられました)。
       
   484 
       
   485    * `doctrine.orm.entity_managers`
       
   486    * `doctrine.orm.default_entity_manager`
       
   487    * `doctrine.dbal.default_connection`
       
   488 
       
   489     変更前:
       
   490 
       
   491         $container->getParameter('doctrine.orm.entity_managers')
       
   492         $container->getParameter('doctrine.orm.default_entity_manager')
       
   493         $container->getParameter('doctrine.orm.default_connection')
       
   494 
       
   495     変更後:
       
   496 
       
   497         $container->get('doctrine')->getEntityManagerNames()
       
   498         $container->get('doctrine')->getDefaultEntityManagerName()
       
   499         $container->get('doctrine')->getDefaultConnectionName()
       
   500 
       
   501     ただし、これらのメソッドを使わなくても、次のようにして Registry オブジェクトから直接 EntityManager オブジェクトを取得できます。
       
   502 
       
   503     変更前:
       
   504 
       
   505         $em = $this->get('doctrine.orm.entity_manager');
       
   506         $em = $this->get('doctrine.orm.foobar_entity_manager');
       
   507 
       
   508     変更後:
       
   509 
       
   510         $em = $this->get('doctrine')->getEntityManager();
       
   511         $em = $this->get('doctrine')->getEntityManager('foobar');
       
   512 
       
   513 * `doctrine:generate:entities` コマンドの引数とオプションが変更されました。
       
   514   新しい引数とオプションの詳細は、`./app/console doctrine:generate:entities --help` コマンドを実行して確認してください。
       
   515 
       
   516 * `doctrine:generate:repositories` コマンドは削除されました。
       
   517   このコマンドに相当する機能は、`doctrine:generate:entities` コマンドに統合されました。
       
   518 
       
   519 * Doctrine イベントサブスクライバーは、ユニークな `doctrine.event_subscriber` タグを使うように変更されました。
       
   520   また、Doctrine イベントリスナーは、ユニークな `doctrine.event_listener` タグを使うように変更されました。
       
   521   コネクションを指定するには、オプションの `connection` 属性を使ってください。
       
   522 
       
   523     変更前:
       
   524 
       
   525         listener:
       
   526             class: MyEventListener
       
   527             tags:
       
   528                 - { name: doctrine.common.event_listener, event: name }
       
   529                 - { name: doctrine.dbal.default_event_listener, event: name }
       
   530         subscriber:
       
   531             class: MyEventSubscriber
       
   532             tags:
       
   533                 - { name: doctrine.common.event_subscriber }
       
   534                 - { name: doctrine.dbal.default_event_subscriber }
       
   535 
       
   536     変更後:
       
   537 
       
   538         listener:
       
   539             class: MyEventListener
       
   540             tags:
       
   541                 - { name: doctrine.event_listener, event: name }                      # すべてのコネクションに対して登録
       
   542                 - { name: doctrine.event_listener, event: name, connection: default } # デフォルトコネクションにのみ登録
       
   543         subscriber:
       
   544             class: MyEventSubscriber
       
   545             tags:
       
   546                 - { name: doctrine.event_subscriber }                      # すべてのコネクションに対して登録
       
   547                 - { name: doctrine.event_subscriber, connection: default } # デフォルトコネクションにのみ登録
       
   548 
       
   549 * アプリケーションの翻訳ファイルは、`Resources` ディレクトリに保存されるように変更されました。
       
   550 
       
   551     変更前:
       
   552 
       
   553         app/translations/catalogue.fr.xml
       
   554 
       
   555     変更後:
       
   556 
       
   557         app/Resources/translations/catalogue.fr.xml
       
   558 
       
   559 * `collection` フォームタイプの `modifiable` オプションは、2 つのオプション "allow_add" と "allow_delete" に分割されました。
       
   560 
       
   561     変更前:
       
   562 
       
   563         $builder->add('tags', 'collection', array(
       
   564             'type' => 'text',
       
   565             'modifiable' => true,
       
   566         ));
       
   567 
       
   568     変更後:
       
   569 
       
   570         $builder->add('tags', 'collection', array(
       
   571             'type' => 'text',
       
   572             'allow_add' => true,
       
   573             'allow_delete' => true,
       
   574         ));
       
   575 
       
   576 * `Request::hasSession()` メソッドの名前は `Request::hasPreviousSession()` に変更されました。`hasSession()` メソッドはまだ存在しますが、
       
   577   セッションが以前のリクエストから開始されたかどうかではなく、リクエストがセッションオブジェクトを含んでいるかチェックするのみです。
       
   578 
       
   579 * Serializer: NormalizerInterface の `supports()` メソッドは `supportsNormalization()` と `supportsDenormalization()` の 2 つのメソッドに分割されました。
       
   580 
       
   581 * `ParameterBag::getDeep()` メソッドは削除され、`ParameterBag::get()` メソッドの真偽値の引数に置き換えられました。
       
   582 
       
   583 * Serializer: `AbstractEncoder` と `AbstractNormalizer` はそれぞれ `SerializerAwareEncoder` と `SerializerAwareNormalizer` に名前が変更されました。
       
   584 
       
   585 * Serializer: すべてのインターフェイスから `$properties` という引数が除かれました。
       
   586 
       
   587 * Form: オプションの値である "date" タイプの "widget" の "text" は "single-text" に名前が変更されました。
       
   588   "text" は現在は個々のテキストボックスを示します ("time" タイプのように) 。
       
   589 
       
   590 * Form: ビュー変数 `name` が `full_name` に変更されました。`name` 変数には `$form->getName()` と同じ値である、ローカルの短い名前が格納されるようになりました。
       
   591 
       
   592 PR12 から beta1
       
   593 ---------------
       
   594 
       
   595 * CSRF シークレットの設定は、`secret` という必須のグローバル設定に変更されました(また、このシークレット値は CSRF 以外でも利用されます)
       
   596 
       
   597     変更前:
       
   598 
       
   599         framework:
       
   600             csrf_protection:
       
   601                 secret: S3cr3t
       
   602 
       
   603     変更後:
       
   604 
       
   605         framework:
       
   606             secret: S3cr3t
       
   607 
       
   608 * `File::getWebPath()` メソッドと `File::rename()` メソッドは削除されました。同様に `framework.document_root` コンフィギュレーションも削除されました。
       
   609 
       
   610 * `File::getDefaultExtension()` メソッドの名前は `File::guessExtension()` に変更されました。
       
   611   また、拡張子を推測できなかった場合は null を返すように変更されました。
       
   612 
       
   613 * `session` のコンフィギュレーションがリファクタリングされました
       
   614 
       
   615   * `class` オプションが削除されました(代わりに `session.class` パラメータを使ってください)
       
   616 
       
   617   * PDO セッションストレージのコンフィギュレーションが削除されました(クックブックのレシピは修正中です)
       
   618 
       
   619   * `storage_id` オプションには、サービスIDの一部ではなく、サービスIDそのものを指定するように変更されました。
       
   620 
       
   621 * `DoctrineMigrationsBundle` と `DoctrineFixturesBundle` の 2 つのバンドルは、Symfony コアから独立し、個別のリポジトリで管理されるようになりました。
       
   622 
       
   623 * フォームフレームワークの大きなリファクタリングが行われました(詳細はドキュメントを参照してください)
       
   624 
       
   625 * `trans` タグで、翻訳するメッセージを引数として受け取る形式が廃止されました:
       
   626 
       
   627         {% trans "foo" %}
       
   628         {% trans foo %}
       
   629 
       
   630     次のような長い形式か、フィルタ形式を使ってください:
       
   631 
       
   632         {% trans %}foo{% endtrans %}
       
   633         {{ foo|trans }}
       
   634 
       
   635     こうすることで、タグとフィルタの使用方法が明確になり、自動出力エスケープのルールが適用された場合により分かりやすくなります(詳細はドキュメントを参照してください)。
       
   636 
       
   637 * DependencyInjection コンポーネントの `ContainerBuilder` クラスと `Definition` クラスのいくつかのメソッドの名前が、より分かりやすく一貫性のある名前に変更されました:
       
   638 
       
   639     変更前:
       
   640 
       
   641         $container->remove('my_definition');
       
   642         $definition->setArgument(0, 'foo');
       
   643 
       
   644     変更後:
       
   645 
       
   646         $container->removeDefinition('my_definition');
       
   647         $definition->replaceArgument(0, 'foo');
       
   648 
       
   649 * rememberme のコンフィギュレーションで、`token_provider key` サービスIDのサフィックスを指定するのではなく、サービスIDそのものを指定するように変更されました。
       
   650 
       
   651 PR11 から PR12
       
   652 --------------
       
   653 
       
   654 * HttpFoundation\Cookie::getExpire() は getExpiresTime() に名前が変更されました。
       
   655 
       
   656 * XMLのコンフィギュレーションの記述方法が変更されました。属性が1つしかないタグは、すべてタグのコンテンツとして記述するように変更されました。
       
   657 
       
   658   変更前:
       
   659 
       
   660         <bundle name="MyBundle" />
       
   661         <app:engine id="twig" />
       
   662         <twig:extension id="twig.extension.debug" />
       
   663 
       
   664   変更後:
       
   665 
       
   666         <bundle>MyBundle</bundle>
       
   667         <app:engine>twig</app:engine>
       
   668         <twig:extension>twig.extension.debug</twig:extension>
       
   669 
       
   670 * SwitchUserListenerが有効な場合に、すべてのユーザーが任意のアカウントになりすませる致命的な脆弱性を修正しました。SwitchUserListenerを利用しない設定にしている場合は影響はありません。
       
   671 
       
   672 * DIコンテナのコンパイルプロセスの最後に、すべてのサービスに対する参照のバリデーションがより厳密に行われるようになりました。これにより、無効なサービス参照が見つかった場合は、コンパイル時の例外が発生します(以前の動作は、実行時例外でした)。
       
   673 
       
   674 PR10 から PR11
       
   675 --------------
       
   676 
       
   677 * エクステンションのコンフィギュレーションクラスには、`Symfony\Component\Config\Definition\ConfigurationInterface` インターフェイスを実装する必要があります。この部分の後方互換性は維持されていますが、今後の開発のために、エクステンションにこのインターフェイスを実装しておいてください。
       
   678 
       
   679 * Monologのオプション `fingerscrossed` は `fingers_crossed` に名前が変更されました。
       
   680 
       
   681 PR9 から PR10
       
   682 -------------
       
   683 
       
   684 * バンドルの論理名には、再び `Bundle` サフィックスを付けるように修正されました:
       
   685 
       
   686     *コントローラ*: `Blog:Post:show` -> `BlogBundle:Post:show`
       
   687 
       
   688     *テンプレート*: `Blog:Post:show.html.twig` -> `BlogBundle:Post:show.html.twig`
       
   689 
       
   690     *リソース*:     `@Blog/Resources/config/blog.xml` -> `@BlogBundle/Resources/config/blog.xml`
       
   691 
       
   692     *Doctrine*:     `$em->find('Blog:Post', $id)` -> `$em->find('BlogBundle:Post', $id)`
       
   693 
       
   694 * `ZendBundle` は `MonologBundle` に置き換えられました。
       
   695   これに関するプロジェクトのアップデート方法は、Symfony Standard Edition の変更点を参考にしてください:
       
   696   https://github.com/symfony/symfony-standard/pull/30/files
       
   697 
       
   698 * コアバンドルのパラメータは、ほぼすべて削除されました。
       
   699   代わりにバンドルのエクステンションの設定で公開されている設定を使うようにしてください。
       
   700 
       
   701 * 一貫性のために、いくつかのコアバンドルのサービス名が変更されました。
       
   702 
       
   703 * バリデータの名前空間が `validation` から `assert` へ変更されました(PR9向けにアナウンスされていましたが、PR10での変更となりました):
       
   704 
       
   705     変更前:
       
   706 
       
   707         @validation:NotNull
       
   708 
       
   709     変更後:
       
   710 
       
   711         @assert:NotNull
       
   712 
       
   713     さらに、いくつかの制約で使われていた `Assert` プレフィックスは削除されました(`AssertTrue` から `True` へ変更)
       
   714 
       
   715 * `ApplicationTester::getDisplay()` と `CommandTester::getDisplay()` メソッドは、コマンドの終了コードを返すようになりました
       
   716 
       
   717 
       
   718 PR8 から PR9
       
   719 ------------
       
   720 
       
   721 * `Symfony\Bundle\FrameworkBundle\Util\Filesystem` は、`Symfony\Component\HttpKernel\Util\Filesystem` へ移動されました
       
   722 
       
   723 * `Execute` 制約は、`Callback` 制約に名前が変更されました
       
   724 
       
   725 * HTTPの例外クラスのシグニチャが変更されました:
       
   726 
       
   727     変更前:
       
   728 
       
   729         throw new NotFoundHttpException('Not Found', $message, 0, $e);
       
   730 
       
   731     変更後:
       
   732 
       
   733         throw new NotFoundHttpException($message, $e);
       
   734 
       
   735 * RequestMatcher クラスでは、正規表現に `^` と `$` が自動的には追加されなくなりました
       
   736 
       
   737     この変更によって、セキュリティの設定をたとえば次のように変更する必要があります:
       
   738 
       
   739     変更前:
       
   740 
       
   741         pattern:  /_profiler.*
       
   742         pattern:  /login
       
   743 
       
   744     変更後:
       
   745 
       
   746         pattern:  ^/_profiler
       
   747         pattern:  ^/login$
       
   748 
       
   749 * `app/` ディレクトリ以下のグローバルテンプレートの位置が変更されました(古いディレクトリでは動作しなくなります):
       
   750 
       
   751     変更前:
       
   752 
       
   753         app/views/base.html.twig
       
   754         app/views/AcmeDemoBundle/base.html.twig
       
   755 
       
   756     変更後:
       
   757 
       
   758         app/Resources/views/base.html.twig
       
   759         app/Resources/AcmeDemo/views/base.html.twig
       
   760 
       
   761 * バンドルの論理名に、`Bundle` サフィックスをつける必要がなくなりました:
       
   762 
       
   763     *コントローラ*: `BlogBundle:Post:show` -> `Blog:Post:show`
       
   764 
       
   765     *テンプレート*: `BlogBundle:Post:show.html.twig` -> `Blog:Post:show.html.twig`
       
   766 
       
   767     *リソース*:     `@BlogBundle/Resources/config/blog.xml` -> `@Blog/Resources/config/blog.xml`
       
   768 
       
   769     *Doctrine*:    `$em->find('BlogBundle:Post', $id)` -> `$em->find('Blog:Post', $id)`
       
   770 
       
   771 * Asseticのフィルターは明示的にロードする必要があります:
       
   772 
       
   773         assetic:
       
   774             filters:
       
   775                 cssrewrite: ~
       
   776                 yui_css:
       
   777                     jar:      "/path/to/yuicompressor.jar"
       
   778                 my_filter:
       
   779                     resource: "%kernel.root_dir%/config/my_filter.xml"
       
   780                     foo:      bar