3.7 KiB
3.7 KiB
UPGRADE FROM 1.x to 2.0
PHP and Symfony version support
- Support for PHP 5.5, 5.6 and 7.0 was dropped
- Support for unsupported Symfony versions was dropped. The bundle now supports Symfony 3.4 LTS and 4.1 or newer.
- Support for Twig 1.34 and below as well as 2.4 and below (for 2.x) releases was dropped.
- When no charset parameter is defined, it now defaults to
utf8mb4
on the MySQL platform and toutf8
on all other platforms.
Commands
Doctrine\Bundle\DoctrineBundle\Command
requires aManagerRegistry
instance when instantiating.- Dropped
setContainer
andgetContainer
inDoctrine\Bundle\DoctrineBundle\Command
. Doctrine\Bundle\DoctrineBundle\Command
no longer implementsContainerAwareInterface
.Doctrine\Bundle\DoctrineBundle\Command\GenerateEntitiesDoctrineCommand
was dropped in favour of the MakerBundle.
Deprecation of DoctrineCacheBundle
Configuring caches through DoctrineCacheBundle is no longer possible. Please use
symfony/cache through the pool
type or configure your cache services manually
and use the service
type.
Mapping
- Dropped
ContainerAwareEntityListenerResolver
, useContainerEntityListenerResolver
instead.
Registry
Registry
no longer implementsSymfony\Bridge\Doctrine\RegistryInterface
.- Removed all deprecated entity manager specific methods from the registry.
Service aliases
- The
Symfony\Bridge\Doctrine\RegistryInterface
interface is no longer aliased to thedoctrine
service, useDoctrine\Common\Persistence\ManagerRegistry
instead. - The
Doctrine\Common\Persistence\ObjectManager
interface is no longer aliased to thedoctrine.orm.entity_manager
service, useDoctrine\ORM\EntityManagerInterface
instead.
Types
- Marking types as commented in the configuration is no longer supported.
Instead, mark them commented using the
requiresSQLCommentHint()
method of the type. - The
commented
configuration option for types will be dropped in a future release. You should not use it.
UnitOfWork cleared between each request
If all of these are true:
- You call
Symfony\Bundle\FrameworkBundle\Client::disableReboot()
in your test case - Trigger multiple HTTP requests (via
Symfony\Bundle\FrameworkBundle\Client::request()
etc.) within your test case - Your test case relies on Doctrine ORM keeping references to old entities between requests (this is most obvious when calling
Doctrine\Persistence\ObjectManager::refresh
)
Your test case will fail since DoctrineBundle
2.0.3, as identity map is now cleared between each request
to better simulate real requests and avoid memory leaks. You have two options to solve this:
- Change your test cases with new behaviour in mind. In a lot of cases this just means to replace
ObjectManager::refresh($entity)
with$entity = ObjectManager::find($entity->getId())
. This is the recommended solution. - Write a compiler pass which restores old behaviour, e.g. by adding the following to your
Kernel
class:
protected function build(\Symfony\Component\DependencyInjection\ContainerBuilder $container)
{
parent::build($container);
if ($this->environment === 'test') {
$container->addCompilerPass(new class implements \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface {
public function process(\Symfony\Component\DependencyInjection\ContainerBuilder $container)
{
$container->getDefinition('doctrine')->clearTag('kernel.reset');
}
}, \Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, 1);
}
}