|
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 |