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-28 22:09:08 +01:00
|
|
|
beta1 to beta2
|
|
|
|
--------------
|
|
|
|
|
|
|
|
* The annotation parsing process has been changed. All annotations which are used
|
|
|
|
in a class must now be imported (just like you import PHP namespaces with the
|
|
|
|
"use" statement):
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @orm:Entity
|
|
|
|
*/
|
|
|
|
class MyUser
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @orm:Id
|
|
|
|
* @orm:GeneratedValue(strategy = "AUTO")
|
|
|
|
* @orm:Column(type="integer")
|
|
|
|
* @var integer
|
|
|
|
*/
|
|
|
|
private $id;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @orm:Column(type="string", nullable=false)
|
|
|
|
* @assert:NotBlank
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
private $name;
|
|
|
|
}
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @import("Doctrine\ORM\Mapping\*")
|
2011-04-30 09:55:43 +01:00
|
|
|
* @import("Doctrine\ODM\MongoDB\Mapping\*", alias="mongodb")
|
2011-04-28 22:09:08 +01:00
|
|
|
* @import("Symfony\Component\Validator\Constraints\*")
|
|
|
|
* @ignorePhpDoc
|
|
|
|
* @Entity
|
|
|
|
*/
|
|
|
|
class MyUser
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @Id
|
2011-04-30 09:55:43 +01:00
|
|
|
* @mongodb:Id
|
2011-04-28 22:09:08 +01:00
|
|
|
* @GeneratedValue(strategy="AUTO")
|
|
|
|
* @Column(type="integer")
|
|
|
|
* @var integer
|
|
|
|
*/
|
|
|
|
private $id;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Column(type="string", nullable=false)
|
|
|
|
* @NotBlank
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
private $name;
|
|
|
|
}
|
|
|
|
|
|
|
|
* The config under "framework.validation.annotations" has been removed and was
|
|
|
|
replaced with a boolean flag "framework.validation.enable_annotations" which
|
|
|
|
defaults to false.
|
|
|
|
|
|
|
|
* The Set constraint has been removed as it is not required anymore.
|
|
|
|
|
|
|
|
Before:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @assert:Set({@assert:Callback(...), @assert:Callback(...)})
|
|
|
|
*/
|
|
|
|
private $foo;
|
|
|
|
|
|
|
|
After:
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Callback(...)
|
|
|
|
* @Callback(...)
|
|
|
|
*/
|
|
|
|
private $foo;
|
|
|
|
|
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-27 22:01:04 +01:00
|
|
|
* The `doctrine.orm.entity_managers` is now hash of entity manager names/ids pairs:
|
|
|
|
|
|
|
|
Before: array('default', 'foo')
|
|
|
|
After: array('default' => 'doctrine.orm.default_entity_manager', 'foo' => 'doctrine.orm.foo_entity_manager'))
|
|
|
|
|
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-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-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-04-19 11:12:29 +01:00
|
|
|
* Fixes a critical security issue which allowed all users to switch to
|
|
|
|
arbitrary accounts when the SwitchUserListener was activated. Configurations
|
|
|
|
which do not use the SwitchUserListener are not affected.
|
|
|
|
|
2011-04-14 23:11:50 +01:00
|
|
|
* The Dependency Injection Container now strongly validates the references of
|
|
|
|
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
|