Symfony Standard Edition Upgrade
From Symfony 2.0 to Symfony 2.1
Project Dependencies
As of Symfony 2.1, project dependencies are managed by Composer:
The
bin/vendorsscript can be removed ascomposer.phardoes all the work now (it is recommended to install it globally on your machine).The
depsfile need to be replaced with thecomposer.jsonone.The
composer.lockis the equivalent of the generateddeps.lockfile and it is automatically generated by Composer.
Download the default
<code>composer.json</code>
and
<code>composer.lock</code>
files for Symfony 2.1 and put them into the main directory of your project. If
you have customized your deps file, move the added dependencies to the
composer.json file (many bundles and PHP libraries are already available as
Composer packages -- search for them on Packagist).
Remove your current vendor directory.
Finally, run Composer:
$ composer.phar install
Note: You must complete the upgrade steps below so composer can successfully generate the autoload files.
app/autoload.php
The default autoload.php reads as follows (it has been simplified a lot as
autoloading for libraries and bundles declared in your composer.json file is
automatically managed by the Composer autoloader):
<?php
use Doctrine\Common\Annotations\AnnotationRegistry;
$loader = include __DIR__.'/../vendor/autoload.php';
// intl
if (!function_exists('intl_get_error_code')) {
require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';
$loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
}
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
return $loader;
app/config/config.yml
The framework.charset setting must be removed. If you are not using UTF-8
for your application, override the getCharset() method in your AppKernel
class instead:
class AppKernel extends Kernel
{
public function getCharset()
{
return 'ISO-8859-1';
}
// ...
}
You might want to add the new strict_requirements parameter to
framework.router (it avoids fatal errors in the production environment when
a link cannot be generated):
framework:
router:
strict_requirements: "%kernel.debug%"
The default_locale parameter is now a setting of the main framework
configuration (it was under the framework.session in 2.0):
framework:
default_locale: "%locale%"
The auto_start setting under framework.session must be removed as it is
not used anymore (the session is now always started on-demand). If
auto_start was the only setting under the framework.session entry, don't
remove it entirely, but set its value to ~ (~ means null in YAML)
instead:
framework:
session: ~
The trust_proxy_headers setting was added in the default configuration file
(as it should be set to true when you install your application behind a
reverse proxy):
framework:
trust_proxy_headers: false
An empty bundles entry was added to the assetic configuration:
assetic:
bundles: []
The default swiftmailer configuration now has the spool setting configured
to the memory type to defer email sending after the response is sent to the
user (recommended for better end-user performance):
swiftmailer:
spool: { type: memory }
The jms_security_extra configuration was moved to the security.yml
configuration file.
app/config/config_dev.yml
An example of how to send all emails to a unique address was added:
#swiftmailer:
# delivery_address: me@example.com
app/config/config_test.yml
The storage_id setting must be changed to session.storage.mock_file:
framework:
session:
storage_id: session.storage.mock_file
app/config/parameters.ini
The file has been converted to a YAML file which reads as follows:
parameters:
database_driver: pdo_mysql
database_host: localhost
database_port: ~
database_name: symfony
database_user: root
database_password: ~
mailer_transport: smtp
mailer_host: localhost
mailer_user: ~
mailer_password: ~
locale: en
secret: ThisTokenIsNotSoSecretChangeIt
Note that if you convert your parameters file to YAML, you must also change
its reference in app/config/config.yml.
app/config/routing_dev.yml
The _assetic entry was removed:
#_assetic:
# resource: .
# type: assetic
app/config/security.yml
Under security.access_control, the default rule for internal routes was changed:
security:
access_control:
#- { path: ^/_internal/secure, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
Under security.providers, the in_memory example was updated to the following:
security:
providers:
in_memory:
memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
app/AppKernel.php
The following bundles have been added to the list of default registered bundles:
new JMS\AopBundle\JMSAopBundle(),
new JMS\DiExtraBundle\JMSDiExtraBundle($this),
web/app.php
The default web/app.php file now reads as follows:
<?php
use Symfony\Component\ClassLoader\ApcClassLoader;
use Symfony\Component\HttpFoundation\Request;
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
// Use APC for autoloading to improve performance
// Change 'sf2' by the prefix you want in order to prevent key conflict with another application
/*
$loader = new ApcClassLoader('sf2', $loader);
$loader->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);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
web/app_dev.php
The default web/app_dev.php file now reads as follows:
<?php
use Symfony\Component\HttpFoundation\Request;
// 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',
'::1',
))
) {
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';
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);