Skip to content

[DependencyInjection][ProxyManager] Failed opening required file during cache warmup #33181

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Devristo opened this issue Aug 15, 2019 · 1 comment

Comments

@Devristo
Copy link
Contributor

Devristo commented Aug 15, 2019

Symfony version(s) affected: 4.4.x-dev

Description
An empty Symfony 4.4.-x dev project with orm-pack and symfony/proxy-manager-bridge fails to boot due to a missing file.

How to reproduce

$ php -v
PHP 7.3.8 (cli) (built: Jul 30 2019 09:26:16) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
symfony new reproducer-proxy-bug --version=next
cd reproducer-proxy-bug

# Everything still fine after requiring doctrine
composer require orm-pack

# Requiring this package breaks the app
composer require symfony/proxy-manager-bridge

Gives the following output

* Creating a new Symfony 4.4.x@dev project with Composer
  (running /usr/bin/composer create-project symfony/skeleton reproducer-proxy-bug 4.4.x@dev)

* Setting up the project under Git version control
  (running git init reproducer-proxy-bug)

                                                                                                                        
 [OK] Your project is now ready in /home/chris/Projects/reproducer-proxy-bug                                            
                                                                                                                        

Using version dev-master for symfony/orm-pack
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Restricting packages listed in "symfony/symfony" to "4.4.*"
Package operations: 23 installs, 0 updates, 0 removals
  - Installing ocramius/package-versions (dev-master 1d32342): Loading from cache
  - Installing symfony/stopwatch (4.4.x-dev 3dfa8b3): Loading from cache
  - Installing zendframework/zend-code (dev-develop 8003f74): Loading from cache
  - Installing ocramius/proxy-manager (2.2.x-dev 4d15474): Loading from cache
  - Installing doctrine/event-manager (dev-master e05ae70): Loading from cache
  - Installing doctrine/cache (dev-master c29471b): Loading from cache
  - Installing doctrine/dbal (dev-master 9ff47e7): Loading from cache
  - Installing doctrine/lexer (dev-master 6c4b4c3): Loading from cache
  - Installing doctrine/annotations (1.7.x-dev fa4c4e8): Loading from cache
  - Installing doctrine/reflection (dev-master 4a97a22): Loading from cache
  - Installing doctrine/collections (1.6.x-dev c5e0bc1): Loading from cache
  - Installing doctrine/persistence (1.2.x-dev 43526ae): Loading from cache
  - Installing doctrine/inflector (1.3.x-dev 45d9b13): Loading from cache
  - Installing doctrine/common (dev-master 3773c7b): Loading from cache
  - Installing doctrine/migrations (dev-master 50c7d16): Loading from cache
  - Installing symfony/doctrine-bridge (4.4.x-dev 6365095): Loading from cache
  - Installing doctrine/doctrine-cache-bundle (dev-master c46725e): Loading from cache
  - Installing jdorn/sql-formatter (dev-master 7ef9b85): Loading from cache
  - Installing doctrine/doctrine-bundle (1.12.x-dev 88e5ac9): Loading from cache
  - Installing doctrine/doctrine-migrations-bundle (dev-master 2fa7e62): Loading from cache
  - Installing doctrine/instantiator (dev-master 7c71fc2): Loading from cache
  - Installing doctrine/orm (2.7.x-dev 9e73672): Loading from cache
  - Installing symfony/orm-pack (dev-master 36c2a92): Loading from cache
Writing lock file
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
Symfony operations: 4 recipes (77c589db09086b98191799482e30ed09)
  - Configuring doctrine/annotations (>=1.0): From github.com/symfony/recipes:master
  - Configuring doctrine/doctrine-cache-bundle (>=dev-master): From auto-generated recipe
  - Configuring doctrine/doctrine-bundle (>=1.6): From github.com/symfony/recipes:master
  - Configuring doctrine/doctrine-migrations-bundle (>=1.2): From github.com/symfony/recipes:master
Executing script cache:clear [OK]
Executing script assets:install public [OK]

Some files may have been created or updated to configure your new packages.
Please review, edit and commit them: these files are yours.

                        
 Database Configuration 
                        

  * Modify your DATABASE_URL config in .env

  * Configure the driver (mysql) and
    server_version (5.7) in config/packages/doctrine.yaml

Restricting packages listed in "symfony/symfony" to "4.4.*"
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Restricting packages listed in "symfony/symfony" to "4.4.*"
Package operations: 1 install, 0 updates, 0 removals
  - Installing symfony/proxy-manager-bridge (4.4.x-dev fbba39f): Loading from cache
Writing lock file
Generating autoload files
ocramius/package-versions: Generating version class...
ocramius/package-versions: ...done generating version class
Executing script cache:clear [KO]
 [KO]
Script cache:clear returned with error code 255
!!  PHP Warning:  Uncaught ErrorException: Warning: require(/home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/EntityManager_9a5be93.php): failed to open stream: No such file or directory in /home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/srcApp_KernelDevDebugContainer.php:179
!!  Stack trace:
!!  #0 /home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/srcApp_KernelDevDebugContainer.php(179): require()
!!  #1 /home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/srcApp_KernelDevDebugContainer.php(184): ContainerQEkwsbv\srcApp_KernelDevDebugContainer->load('EntityManager_9...')
!!  #2 /home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/getDoctrine_Orm_DefaultEntityManagerService.php(18): ContainerQEkwsbv\srcApp_KernelDevDebugContainer->createProxy('EntityManager_9...', Object(Closure))
!!  #3 /home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/srcApp_KernelDevDebugContainer.php(179): require('/home/chris/Pro...')
!!  #4 /home in /home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/srcApp_KernelDevDebugContainer.php on line 179
!!  PHP Fatal error:  ContainerQEkwsbv\srcApp_KernelDevDebugContainer::load(): Failed opening required '/home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/EntityManager_9a5be93.php' (include_path='.:/usr/share/pear:/usr/share/php') in /home/chris/Projects/reproducer-proxy-bug/var/cache/dev/ContainerQEkwsbv/srcApp_KernelDevDebugContainer.php on line 179
!!  
!!  In srcApp_KernelDevDebugContainer.php line 179:
!!                                                                                 
!!    Compile Error: ContainerQEkwsbv\srcApp_KernelDevDebugContainer::load(): Fai  
!!    led opening required '/home/chris/Projects/reproducer-proxy-bug/var/cache/d  
!!    ev/ContainerQEkwsbv/EntityManager_9a5be93.php' (include_path='.:/usr/share/  
!!    pear:/usr/share/php')                                                        
!!                                                                                 
!!  
!!  
Script @auto-scripts was called via post-update-cmd

Installation failed, reverting ./composer.json to its original content.

Possible Solution

Additional context
Some added context as I am also running into this problem.

  • It is related to symfony/proxy-manager-bridge however I suspect the issue could be in symfony/dependency-injection. Perhaps related to commit c893986 and PR [DI] Allow dumping the container in one file instead of many files #32581 .
  • In Symfony 4.3 the EntityManager_9a5be93.php is being generated
  • In Symfony 4.4 the EntityManager_9a5be93.php is NOT being generated
  • In Symfony 4.4 the \dirname(__DIR__,.php is attempted to be created instead

image

Perhaps something is going wrong in \Symfony\Component\DependencyInjection\Dumper\PhpDumper::generateProxyClasses ? See

$file = preg_replace('#^\\$this->targetDirs\[(\d++)\]#', sprintf('\dirname(__DIR__, %d + $1)', $this->asFiles), $file);

It returns an array like this:

{
  "\\dirname(__DIR__,.php": "include_once \\dirname(__DIR__, 1 + 3).'\/vendor\/doctrine\/persistence\/lib\/Doctrine\/Common\/Persistence\/ObjectManager.php';\ninclude_once \\dirname(__DIR__, 1 + 3).'\/vendor\/doctrine\/orm\/lib\/Doctrine\/ORM\/EntityManagerInterface.php';\ninclude_once \\dirname(__DIR__, 1 + 3).'\/vendor\/doctrine\/orm\/lib\/Doctrine\/ORM\/EntityManager.php';\n\nclass EntityManager_9a5be93 extends \\Doctrine\\ORM\\EntityManager implements \\ProxyManager\\Proxy\\VirtualProxyInterface\n{\n\n    \/**\n     * @var \\Closure|null initializer responsible for generating the wrapped object\n     *\/\n    private $valueHolder8f2f0 = null;\n\n    \/**\n     * @var \\Closure|null initializer responsible for generating the wrapped object\n     *\/\n    private $initializerd0fa7 = null;\n\n    \/**\n     * @var bool[] map of public properties of the parent class\n     *\/\n    private static $publicProperties6b99d = [\n        \n    ];\n\n    public function getConnection()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getConnection', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getConnection();\n    }\n\n    public function getMetadataFactory()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getMetadataFactory', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getMetadataFactory();\n    }\n\n    public function getExpressionBuilder()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getExpressionBuilder', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getExpressionBuilder();\n    }\n\n    public function beginTransaction()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'beginTransaction', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->beginTransaction();\n    }\n\n    public function getCache()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getCache', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getCache();\n    }\n\n    public function transactional($func)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'transactional', array('func' => $func), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->transactional($func);\n    }\n\n    public function commit()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'commit', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->commit();\n    }\n\n    public function rollback()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'rollback', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->rollback();\n    }\n\n    public function getClassMetadata($className)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getClassMetadata', array('className' => $className), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getClassMetadata($className);\n    }\n\n    public function createQuery($dql = '')\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'createQuery', array('dql' => $dql), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->createQuery($dql);\n    }\n\n    public function createNamedQuery($name)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'createNamedQuery', array('name' => $name), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->createNamedQuery($name);\n    }\n\n    public function createNativeQuery($sql, \\Doctrine\\ORM\\Query\\ResultSetMapping $rsm)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'createNativeQuery', array('sql' => $sql, 'rsm' => $rsm), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->createNativeQuery($sql, $rsm);\n    }\n\n    public function createNamedNativeQuery($name)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'createNamedNativeQuery', array('name' => $name), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->createNamedNativeQuery($name);\n    }\n\n    public function createQueryBuilder()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'createQueryBuilder', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->createQueryBuilder();\n    }\n\n    public function flush($entity = null)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'flush', array('entity' => $entity), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->flush($entity);\n    }\n\n    public function find($entityName, $id, $lockMode = null, $lockVersion = null)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'find', array('entityName' => $entityName, 'id' => $id, 'lockMode' => $lockMode, 'lockVersion' => $lockVersion), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->find($entityName, $id, $lockMode, $lockVersion);\n    }\n\n    public function getReference($entityName, $id)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getReference', array('entityName' => $entityName, 'id' => $id), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getReference($entityName, $id);\n    }\n\n    public function getPartialReference($entityName, $identifier)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getPartialReference', array('entityName' => $entityName, 'identifier' => $identifier), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getPartialReference($entityName, $identifier);\n    }\n\n    public function clear($entityName = null)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'clear', array('entityName' => $entityName), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->clear($entityName);\n    }\n\n    public function close()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'close', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->close();\n    }\n\n    public function persist($entity)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'persist', array('entity' => $entity), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->persist($entity);\n    }\n\n    public function remove($entity)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'remove', array('entity' => $entity), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->remove($entity);\n    }\n\n    public function refresh($entity)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'refresh', array('entity' => $entity), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->refresh($entity);\n    }\n\n    public function detach($entity)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'detach', array('entity' => $entity), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->detach($entity);\n    }\n\n    public function merge($entity)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'merge', array('entity' => $entity), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->merge($entity);\n    }\n\n    public function copy($entity, $deep = false)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'copy', array('entity' => $entity, 'deep' => $deep), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->copy($entity, $deep);\n    }\n\n    public function lock($entity, $lockMode, $lockVersion = null)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'lock', array('entity' => $entity, 'lockMode' => $lockMode, 'lockVersion' => $lockVersion), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->lock($entity, $lockMode, $lockVersion);\n    }\n\n    public function getRepository($entityName)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getRepository', array('entityName' => $entityName), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getRepository($entityName);\n    }\n\n    public function contains($entity)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'contains', array('entity' => $entity), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->contains($entity);\n    }\n\n    public function getEventManager()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getEventManager', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getEventManager();\n    }\n\n    public function getConfiguration()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getConfiguration', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getConfiguration();\n    }\n\n    public function isOpen()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'isOpen', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->isOpen();\n    }\n\n    public function getUnitOfWork()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getUnitOfWork', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getUnitOfWork();\n    }\n\n    public function getHydrator($hydrationMode)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getHydrator', array('hydrationMode' => $hydrationMode), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getHydrator($hydrationMode);\n    }\n\n    public function newHydrator($hydrationMode)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'newHydrator', array('hydrationMode' => $hydrationMode), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->newHydrator($hydrationMode);\n    }\n\n    public function getProxyFactory()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getProxyFactory', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getProxyFactory();\n    }\n\n    public function initializeObject($obj)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'initializeObject', array('obj' => $obj), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->initializeObject($obj);\n    }\n\n    public function getFilters()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'getFilters', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->getFilters();\n    }\n\n    public function isFiltersStateClean()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'isFiltersStateClean', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->isFiltersStateClean();\n    }\n\n    public function hasFilters()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'hasFilters', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return $this->valueHolder8f2f0->hasFilters();\n    }\n\n    \/**\n     * Constructor for lazy initialization\n     *\n     * @param \\Closure|null $initializer\n     *\/\n    public static function staticProxyConstructor($initializer)\n    {\n        static $reflection;\n\n        $reflection = $reflection ?? new \\ReflectionClass(__CLASS__);\n        $instance = $reflection->newInstanceWithoutConstructor();\n\n        \\Closure::bind(function (\\Doctrine\\ORM\\EntityManager $instance) {\n            unset($instance->config, $instance->conn, $instance->metadataFactory, $instance->unitOfWork, $instance->eventManager, $instance->proxyFactory, $instance->repositoryFactory, $instance->expressionBuilder, $instance->closed, $instance->filterCollection, $instance->cache);\n        }, $instance, 'Doctrine\\\\ORM\\\\EntityManager')->__invoke($instance);\n\n        $instance->initializerd0fa7 = $initializer;\n\n        return $instance;\n    }\n\n    protected function __construct(\\Doctrine\\DBAL\\Connection $conn, \\Doctrine\\ORM\\Configuration $config, \\Doctrine\\Common\\EventManager $eventManager)\n    {\n        static $reflection;\n\n        if (! $this->valueHolder8f2f0) {\n            $reflection = $reflection ?? new \\ReflectionClass('Doctrine\\\\ORM\\\\EntityManager');\n            $this->valueHolder8f2f0 = $reflection->newInstanceWithoutConstructor();\n        \\Closure::bind(function (\\Doctrine\\ORM\\EntityManager $instance) {\n            unset($instance->config, $instance->conn, $instance->metadataFactory, $instance->unitOfWork, $instance->eventManager, $instance->proxyFactory, $instance->repositoryFactory, $instance->expressionBuilder, $instance->closed, $instance->filterCollection, $instance->cache);\n        }, $this, 'Doctrine\\\\ORM\\\\EntityManager')->__invoke($this);\n\n        }\n\n        $this->valueHolder8f2f0->__construct($conn, $config, $eventManager);\n    }\n\n    public function & __get($name)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, '__get', ['name' => $name], $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        if (isset(self::$publicProperties6b99d[$name])) {\n            return $this->valueHolder8f2f0->$name;\n        }\n\n        $realInstanceReflection = new \\ReflectionClass(get_parent_class($this));\n\n        if (! $realInstanceReflection->hasProperty($name)) {\n            $targetObject = $this->valueHolder8f2f0;\n\n            $backtrace = debug_backtrace(false);\n            trigger_error(\n                sprintf(\n                    'Undefined property: %s::$%s in %s on line %s',\n                    get_parent_class($this),\n                    $name,\n                    $backtrace[0]['file'],\n                    $backtrace[0]['line']\n                ),\n                \\E_USER_NOTICE\n            );\n            return $targetObject->$name;\n            return;\n        }\n\n        $targetObject = $this->valueHolder8f2f0;\n        $accessor = function & () use ($targetObject, $name) {\n            return $targetObject->$name;\n        };\n        $backtrace = debug_backtrace(true);\n        $scopeObject = isset($backtrace[1]['object']) ? $backtrace[1]['object'] : new \\ProxyManager\\Stub\\EmptyClassStub();\n        $accessor = $accessor->bindTo($scopeObject, get_class($scopeObject));\n        $returnValue = & $accessor();\n\n        return $returnValue;\n    }\n\n    public function __set($name, $value)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, '__set', array('name' => $name, 'value' => $value), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        $realInstanceReflection = new \\ReflectionClass(get_parent_class($this));\n\n        if (! $realInstanceReflection->hasProperty($name)) {\n            $targetObject = $this->valueHolder8f2f0;\n\n            return $targetObject->$name = $value;\n            return;\n        }\n\n        $targetObject = $this->valueHolder8f2f0;\n        $accessor = function & () use ($targetObject, $name, $value) {\n            return $targetObject->$name = $value;\n        };\n        $backtrace = debug_backtrace(true);\n        $scopeObject = isset($backtrace[1]['object']) ? $backtrace[1]['object'] : new \\ProxyManager\\Stub\\EmptyClassStub();\n        $accessor = $accessor->bindTo($scopeObject, get_class($scopeObject));\n        $returnValue = & $accessor();\n\n        return $returnValue;\n    }\n\n    public function __isset($name)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, '__isset', array('name' => $name), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        $realInstanceReflection = new \\ReflectionClass(get_parent_class($this));\n\n        if (! $realInstanceReflection->hasProperty($name)) {\n            $targetObject = $this->valueHolder8f2f0;\n\n            return isset($targetObject->$name);\n            return;\n        }\n\n        $targetObject = $this->valueHolder8f2f0;\n        $accessor = function () use ($targetObject, $name) {\n            return isset($targetObject->$name);\n        };\n        $backtrace = debug_backtrace(true);\n        $scopeObject = isset($backtrace[1]['object']) ? $backtrace[1]['object'] : new \\ProxyManager\\Stub\\EmptyClassStub();\n        $accessor = $accessor->bindTo($scopeObject, get_class($scopeObject));\n        $returnValue = $accessor();\n\n        return $returnValue;\n    }\n\n    public function __unset($name)\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, '__unset', array('name' => $name), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        $realInstanceReflection = new \\ReflectionClass(get_parent_class($this));\n\n        if (! $realInstanceReflection->hasProperty($name)) {\n            $targetObject = $this->valueHolder8f2f0;\n\n            unset($targetObject->$name);\n            return;\n        }\n\n        $targetObject = $this->valueHolder8f2f0;\n        $accessor = function () use ($targetObject, $name) {\n            unset($targetObject->$name);\n        };\n        $backtrace = debug_backtrace(true);\n        $scopeObject = isset($backtrace[1]['object']) ? $backtrace[1]['object'] : new \\ProxyManager\\Stub\\EmptyClassStub();\n        $accessor = $accessor->bindTo($scopeObject, get_class($scopeObject));\n        $returnValue = $accessor();\n\n        return $returnValue;\n    }\n\n    public function __clone()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, '__clone', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        $this->valueHolder8f2f0 = clone $this->valueHolder8f2f0;\n    }\n\n    public function __sleep()\n    {\n        $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, '__sleep', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n\n        return array('valueHolder8f2f0');\n    }\n\n    public function __wakeup()\n    {\n        \\Closure::bind(function (\\Doctrine\\ORM\\EntityManager $instance) {\n            unset($instance->config, $instance->conn, $instance->metadataFactory, $instance->unitOfWork, $instance->eventManager, $instance->proxyFactory, $instance->repositoryFactory, $instance->expressionBuilder, $instance->closed, $instance->filterCollection, $instance->cache);\n        }, $this, 'Doctrine\\\\ORM\\\\EntityManager')->__invoke($this);\n    }\n\n    public function setProxyInitializer(\\Closure $initializer = null)\n    {\n        $this->initializerd0fa7 = $initializer;\n    }\n\n    public function getProxyInitializer()\n    {\n        return $this->initializerd0fa7;\n    }\n\n    public function initializeProxy() : bool\n    {\n        return $this->initializerd0fa7 && ($this->initializerd0fa7->__invoke($valueHolder8f2f0, $this, 'initializeProxy', array(), $this->initializerd0fa7) || 1) && $this->valueHolder8f2f0 = $valueHolder8f2f0;\n    }\n\n    public function isProxyInitialized() : bool\n    {\n        return null !== $this->valueHolder8f2f0;\n    }\n\n    public function getWrappedValueHolderValue() : ?object\n    {\n        return $this->valueHolder8f2f0;\n    }\n\n\n}\n"
}

Workaround

I can work around the issue by adding the following to my App\Kernel:

protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void
{
    // ...
    $container->setParameter('container.dumper.inline_class_loader', false);
}
@nicolas-grekas
Copy link
Member

Fixed in #33184, thanks.

nicolas-grekas added a commit that referenced this issue Aug 15, 2019
This PR was merged into the 4.4 branch.

Discussion
----------

[DI] fix dumping lazy proxies

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #33181
| License       | MIT
| Doc PR        | -

Commits
-------

2ec1dd9 [DI] fix dumping lazy proxies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants