2011-03-28 16:07:05 +01:00
|
|
|
How to update your project?
|
|
|
|
===========================
|
|
|
|
|
|
|
|
This document explains how to upgrade from one Symfony2 PR version to the next
|
|
|
|
one. It only discusses changes that need to be done when using the "public"
|
|
|
|
API of the framework. If you "hack" the core, you should probably follow the
|
|
|
|
timeline closely anyway.
|
|
|
|
|
2011-04-27 22:01:04 +01:00
|
|
|
beta1 to beta2
|
|
|
|
--------------
|
|
|
|
|
2011-05-05 07:46:04 +01:00
|
|
|
* The ``error_handler`` setting has been removed. The ``ErrorHandler`` class
|
|
|
|
is now managed directly by Symfony SE in ``AppKernel``.
|
|
|
|
|
2011-05-03 11:25:58 +01:00
|
|
|
* The Doctrine metadata files has moved from
|
2011-05-05 16:58:35 +01:00
|
|
|
``Resources/config/doctrine/metadata/orm/`` to ``Resources/config/doctrine``
|
2011-05-06 10:23:00 +01:00
|
|
|
and the extension from ``.dcm.yml`` to ``.orm.yml``
|
2011-05-03 11:25:58 +01:00
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
Resources/config/doctrine/metadata/orm/Bundle.Entity.dcm.xml
|
|
|
|
Resources/config/doctrine/metadata/orm/Bundle.Entity.dcm.yml
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
2011-05-06 10:23:00 +01:00
|
|
|
Resources/config/doctrine/Bundle.Entity.orm.xml
|
|
|
|
Resources/config/doctrine/Bundle.Entity.orm.yml
|
2011-05-03 11:25:58 +01:00
|
|
|
|
2011-05-02 14:32:54 +01:00
|
|
|
* With the introduction of a new Doctrine Registry class, the following
|
|
|
|
parameters have been removed (replaced by methods on the `doctrine`
|
|
|
|
service):
|
|
|
|
|
|
|
|
* doctrine.orm.entity_managers
|
|
|
|
* doctrine.orm.default_entity_manager
|
|
|
|
* doctrine.dbal.default_connection
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
$container->getParameter('doctrine.orm.entity_managers')
|
|
|
|
$container->getParameter('doctrine.orm.default_entity_manager')
|
|
|
|
$container->getParameter('doctrine.orm.default_connection')
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
$container->get('doctrine')->getEntityManagerNames()
|
|
|
|
$container->get('doctrine')->getDefaultEntityManagerName()
|
|
|
|
$container->get('doctrine')->getDefaultConnectionName()
|
|
|
|
|
|
|
|
But you don't really need to use these methods anymore, as to get an entity
|
|
|
|
manager, you can now use the registry directly:
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
$em = $this->get('doctrine.orm.entity_manager');
|
|
|
|
$em = $this->get('doctrine.orm.foobar_entity_manager');
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
$em = $this->get('doctrine')->getEntityManager();
|
|
|
|
$em = $this->get('doctrine')->getEntityManager('foobar');
|
|
|
|
|
2011-05-01 21:57:23 +01:00
|
|
|
* The `doctrine:generate:entities` arguments and options changed. Run
|
|
|
|
`./app/console doctrine:generate:entities --help` for more information about
|
|
|
|
the new syntax.
|
|
|
|
|
|
|
|
* The `doctrine:generate:repositories` command has been removed. The
|
|
|
|
functionality has been moved to the `doctrine:generate:entities`.
|
|
|
|
|
2011-04-27 22:03:29 +01:00
|
|
|
* Doctrine event subscribers now use a unique "doctrine.event_subscriber" tag.
|
|
|
|
Doctrine event listeners also use a unique "doctrine.event_listener" tag. To
|
|
|
|
specify a connection, use the optional "connection" attribute.
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
listener:
|
|
|
|
class: MyEventListener
|
|
|
|
tags:
|
|
|
|
- { name: doctrine.common.event_listener, event: name }
|
|
|
|
- { name: doctrine.dbal.default_event_listener, event: name }
|
|
|
|
subscriber:
|
|
|
|
class: MyEventSubscriber
|
|
|
|
tags:
|
|
|
|
- { name: doctrine.common.event_subscriber }
|
|
|
|
- { name: doctrine.dbal.default_event_subscriber }
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
listener:
|
|
|
|
class: MyEventListener
|
|
|
|
tags:
|
|
|
|
- { name: doctrine.event_listener, event: name } # register for all connections
|
|
|
|
- { name: doctrine.event_listener, event: name, connection: default } # only for the default connection
|
|
|
|
subscriber:
|
|
|
|
class: MyEventSubscriber
|
|
|
|
tags:
|
|
|
|
- { name: doctrine.event_subscriber } # register for all connections
|
|
|
|
- { name: doctrine.event_subscriber, connection: default } # only for the default connection
|
|
|
|
|
2011-04-30 06:25:08 +01:00
|
|
|
* Application translations are now stored in the `Resources` directory:
|
2011-04-29 16:48:38 +01:00
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
app/translations/catalogue.fr.xml
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
2011-04-30 06:25:08 +01:00
|
|
|
app/Resources/translations/catalogue.fr.xml
|
2011-04-29 16:48:38 +01:00
|
|
|
|
2011-05-04 16:29:59 +01:00
|
|
|
* The option "modifiable" of the "collection" form type was split into two
|
|
|
|
options "allow_add" and "allow_delete".
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
$builder->add('tags', 'collection', array(
|
|
|
|
'type' => 'text',
|
|
|
|
'modifiable' => true,
|
|
|
|
));
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
$builder->add('tags', 'collection', array(
|
|
|
|
'type' => 'text',
|
|
|
|
'allow_add' => true,
|
|
|
|
'allow_delete' => true,
|
|
|
|
));
|
|
|
|
|
2011-05-06 18:36:56 +01:00
|
|
|
* Serializer: The NormalizerInterface's `supports()` method has been split in
|
|
|
|
two methods: `supportsNormalization` and `supportsDenormalization`.
|
|
|
|
|
2011-04-21 08:04:16 +01:00
|
|
|
PR12 to beta1
|
|
|
|
-------------
|
|
|
|
|
2011-04-28 09:49:59 +01:00
|
|
|
* The CSRF secret configuration has been moved to a mandatory global `secret`
|
|
|
|
setting (as the secret is now used for everything and not just CSRF):
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
framework:
|
|
|
|
csrf_protection:
|
|
|
|
secret: S3cr3t
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
framework:
|
|
|
|
secret: S3cr3t
|
|
|
|
|
2011-04-27 15:08:50 +01:00
|
|
|
* The `File::getWebPath()` and `File::rename()` methods have been removed, as
|
|
|
|
well as the `framework.document_root` configuration setting.
|
2011-04-27 05:44:52 +01:00
|
|
|
|
2011-05-08 10:15:41 +01:00
|
|
|
* The `File::getDefaultExtension()` method has beean renamed to `File::guessExtension()`.
|
|
|
|
The renamed method now returns null if it cannot guess the extension.
|
|
|
|
|
2011-04-22 12:45:23 +01:00
|
|
|
* The `session` configuration has been refactored:
|
|
|
|
|
|
|
|
* The `class` option has been removed (use the `session.class` parameter
|
|
|
|
instead);
|
|
|
|
|
|
|
|
* The PDO session storage configuration has been removed (a cookbook recipe
|
|
|
|
is in the work);
|
|
|
|
|
|
|
|
* The `storage_id` option now takes a service id instead of just part of it.
|
|
|
|
|
|
|
|
* The `DoctrineMigrationsBundle` and `DoctrineFixturesBundle` bundles have
|
|
|
|
been moved to their own repositories.
|
|
|
|
|
2011-04-22 09:14:23 +01:00
|
|
|
* The form framework has been refactored extensively (more information in the
|
|
|
|
documentation).
|
|
|
|
|
2011-04-21 08:04:16 +01:00
|
|
|
* The `trans` tag does not accept a message as an argument anymore:
|
|
|
|
|
|
|
|
{% trans "foo" %}
|
|
|
|
{% trans foo %}
|
|
|
|
|
|
|
|
Use the long version the tags or the filter instead:
|
|
|
|
|
|
|
|
{% trans %}foo{% endtrans %}
|
|
|
|
{{ foo|trans }}
|
|
|
|
|
|
|
|
This has been done to clarify the usage of the tag and filter and also to
|
|
|
|
make it clearer when the automatic output escaping rules are applied (see
|
|
|
|
the doc for more information).
|
2011-04-20 12:48:32 +01:00
|
|
|
|
|
|
|
* Some methods in the DependencyInjection component's ContainerBuilder and
|
|
|
|
Definition classes have been renamed to be more specific and consistent:
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
$container->remove('my_definition');
|
|
|
|
$definition->setArgument(0, 'foo');
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
$container->removeDefinition('my_definition');
|
|
|
|
$definition->replaceArgument(0, 'foo');
|
2011-04-22 12:45:23 +01:00
|
|
|
|
|
|
|
* In the rememberme configuration, the `token_provider key` now expects a real
|
2011-04-20 21:20:55 +01:00
|
|
|
service id instead of only a suffix.
|
2011-04-20 12:48:32 +01:00
|
|
|
|
2011-04-13 13:13:04 +01:00
|
|
|
PR11 to PR12
|
|
|
|
------------
|
|
|
|
|
2011-04-19 13:05:08 +01:00
|
|
|
* HttpFoundation\Cookie::getExpire() was renamed to getExpiresTime()
|
|
|
|
|
2011-04-15 09:47:21 +01:00
|
|
|
* XML configurations have been normalized. All tags with only one attribute
|
|
|
|
have been converted to tag content:
|
2011-04-13 13:13:04 +01:00
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
<bundle name="MyBundle" />
|
2011-04-15 09:47:21 +01:00
|
|
|
<app:engine id="twig" />
|
|
|
|
<twig:extension id="twig.extension.debug" />
|
2011-04-13 13:13:04 +01:00
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
<bundle>MyBundle</bundle>
|
2011-04-15 09:47:21 +01:00
|
|
|
<app:engine>twig</app:engine>
|
|
|
|
<twig:extension>twig.extension.debug</twig:extension>
|
2011-04-13 13:13:04 +01:00
|
|
|
|
2011-05-06 18:36:56 +01:00
|
|
|
* Fixes a critical security issue which allowed all users to switch to
|
2011-04-19 11:12:29 +01:00
|
|
|
arbitrary accounts when the SwitchUserListener was activated. Configurations
|
|
|
|
which do not use the SwitchUserListener are not affected.
|
|
|
|
|
2011-05-06 18:36:56 +01:00
|
|
|
* The Dependency Injection Container now strongly validates the references of
|
2011-04-14 23:11:50 +01:00
|
|
|
all your services at the end of its compilation process. If you have invalid
|
|
|
|
references this will result in a compile-time exception instead of a run-time
|
|
|
|
exception (the previous behavior).
|
|
|
|
|
2011-04-05 10:42:34 +01:00
|
|
|
PR10 to PR11
|
|
|
|
------------
|
|
|
|
|
|
|
|
* Extension configuration classes should now implement the
|
2011-04-13 13:03:09 +01:00
|
|
|
`Symfony\Component\Config\Definition\ConfigurationInterface` interface. Note
|
|
|
|
that the BC is kept but implementing this interface in your extensions will
|
|
|
|
allow for further developments.
|
|
|
|
|
|
|
|
* The "fingerscrossed" Monolog option has been renamed to "fingers_crossed".
|
2011-04-05 10:42:34 +01:00
|
|
|
|
2011-04-04 10:36:28 +01:00
|
|
|
PR9 to PR10
|
2011-03-31 05:52:18 +01:00
|
|
|
-----------
|
|
|
|
|
2011-04-04 10:36:28 +01:00
|
|
|
* Bundle logical names earned back their `Bundle` suffix:
|
|
|
|
|
|
|
|
*Controllers*: `Blog:Post:show` -> `BlogBundle:Post:show`
|
|
|
|
|
|
|
|
*Templates*: `Blog:Post:show.html.twig` -> `BlogBundle:Post:show.html.twig`
|
|
|
|
|
|
|
|
*Resources*: `@Blog/Resources/config/blog.xml` -> `@BlogBundle/Resources/config/blog.xml`
|
|
|
|
|
|
|
|
*Doctrine*: `$em->find('Blog:Post', $id)` -> `$em->find('BlogBundle:Post', $id)`
|
|
|
|
|
2011-04-04 11:45:31 +01:00
|
|
|
* `ZendBundle` has been replaced by `MonologBundle`. Have a look at the
|
|
|
|
changes made to Symfony SE to see how to upgrade your projects:
|
|
|
|
https://github.com/symfony/symfony-standard/pull/30/files
|
|
|
|
|
2011-04-04 10:44:44 +01:00
|
|
|
* Almost all core bundles parameters have been removed. You should use the
|
|
|
|
settings exposed by the bundle extension configuration instead.
|
|
|
|
|
|
|
|
* Some core bundles service names changed for better consistency.
|
|
|
|
|
2011-03-31 05:52:18 +01:00
|
|
|
* Namespace for validators has changed from `validation` to `assert` (it was
|
|
|
|
announced for PR9 but it was not the case then):
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
@validation:NotNull
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
@assert:NotNull
|
|
|
|
|
|
|
|
Moreover, the `Assert` prefix used for some constraints has been removed
|
|
|
|
(`AssertTrue` to `True`).
|
|
|
|
|
2011-04-04 10:44:44 +01:00
|
|
|
* `ApplicationTester::getDisplay()` and `CommandTester::getDisplay()` method
|
|
|
|
now return the command exit code
|
|
|
|
|
2011-03-28 16:07:05 +01:00
|
|
|
PR8 to PR9
|
|
|
|
----------
|
|
|
|
|
|
|
|
* `Symfony\Bundle\FrameworkBundle\Util\Filesystem` has been moved to
|
|
|
|
`Symfony\Component\HttpKernel\Util\Filesystem`
|
|
|
|
|
|
|
|
* The `Execute` constraint has been renamed to `Callback`
|
|
|
|
|
|
|
|
* The HTTP exceptions classes signatures have changed:
|
|
|
|
|
2011-03-29 08:28:20 +01:00
|
|
|
Before:
|
|
|
|
|
|
|
|
throw new NotFoundHttpException('Not Found', $message, 0, $e);
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
throw new NotFoundHttpException($message, $e);
|
2011-03-28 16:07:05 +01:00
|
|
|
|
|
|
|
* The RequestMatcher class does not add `^` and `$` anymore to regexp.
|
|
|
|
|
|
|
|
You need to update your security configuration accordingly for instance:
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
2011-04-06 09:51:28 +01:00
|
|
|
pattern: /_profiler.*
|
|
|
|
pattern: /login
|
2011-03-28 16:07:05 +01:00
|
|
|
|
|
|
|
After:
|
|
|
|
|
2011-04-06 09:51:28 +01:00
|
|
|
pattern: ^/_profiler
|
|
|
|
pattern: ^/login$
|
2011-03-28 16:07:05 +01:00
|
|
|
|
|
|
|
* Global templates under `app/` moved to a new location (old directory did not
|
|
|
|
work anyway):
|
|
|
|
|
|
|
|
Before:
|
2011-03-29 08:28:20 +01:00
|
|
|
|
2011-03-28 16:07:05 +01:00
|
|
|
app/views/base.html.twig
|
|
|
|
app/views/AcmeDemoBundle/base.html.twig
|
|
|
|
|
|
|
|
After:
|
2011-03-29 08:28:20 +01:00
|
|
|
|
2011-03-28 16:07:05 +01:00
|
|
|
app/Resources/views/base.html.twig
|
2011-03-28 18:25:40 +01:00
|
|
|
app/Resources/AcmeDemo/views/base.html.twig
|
2011-03-28 16:07:05 +01:00
|
|
|
|
2011-03-28 17:12:15 +01:00
|
|
|
* Bundle logical names lose their `Bundle` suffix:
|
|
|
|
|
|
|
|
*Controllers*: `BlogBundle:Post:show` -> `Blog:Post:show`
|
2011-03-28 17:44:40 +01:00
|
|
|
|
2011-03-28 17:12:15 +01:00
|
|
|
*Templates*: `BlogBundle:Post:show.html.twig` -> `Blog:Post:show.html.twig`
|
2011-03-28 17:44:40 +01:00
|
|
|
|
2011-03-28 17:12:15 +01:00
|
|
|
*Resources*: `@BlogBundle/Resources/config/blog.xml` -> `@Blog/Resources/config/blog.xml`
|
2011-03-28 17:44:40 +01:00
|
|
|
|
2011-03-28 17:12:15 +01:00
|
|
|
*Doctrine*: `$em->find('BlogBundle:Post', $id)` -> `$em->find('Blog:Post', $id)`
|
2011-04-03 11:04:31 +01:00
|
|
|
|
|
|
|
* Assetic filters must be now explicitly loaded:
|
|
|
|
|
|
|
|
assetic:
|
|
|
|
filters:
|
|
|
|
cssrewrite: ~
|
|
|
|
yui_css:
|
|
|
|
jar: "/path/to/yuicompressor.jar"
|
|
|
|
my_filter:
|
|
|
|
resource: "%kernel.root_dir%/config/my_filter.xml"
|
|
|
|
foo: bar
|