重新生成后不使用Doctrine 2新代理

时间:2016-01-20 11:44:42

标签: php doctrine-orm proxy

我现在已经没有想法,谷歌也没有帮助。我相信这个问题很容易解决,但目前我还没有看到它为什么会发生。使用开发模式,我的测试环境一切正常。

但是,在开发模式关闭且需要手动生成代理文件的生产中,它不起作用。

我第一次在生产环境中生成代理文件,一切正常。现在我需要改进一些实体,当我使用" doctrine orm:generate-proxies"再次命令,然后生成所有代理文件,当我查看新的实体代理文件时,我可以看到新列被映射。

但是当我尝试保存或加载新对象时,没有任何内容被保存或加载到新列。就好像学说2没有理解的那样,它应该使用新的代理文件。相反,它继续使用一些其他隐藏的旧代理文件,在一些黑暗的末端缓存。

知道为什么教义2不使用新生成的代理文件?

为了更加清晰,这是Doctrine Initialisation代码。

$paths = array(__DIR__ . '/../ORM/Definition/Doctrine2/Entity');

        $isDevMode = false;
        $autoGenerateProxyClasses = AbstractProxyFactory::AUTOGENERATE_NEVER;

        if ($this->serverDevelopment()) {
            $isDevMode = true;
            $autoGenerateProxyClasses = AbstractProxyFactory::AUTOGENERATE_ALWAYS;
        }

        $dbParams = array(
            'driver' => 'pdo_mysql',
            'user' => 'REMOVE',
            'password' => 'REMOVE',
            'dbname' => 'REMOVE',
            'host' => 'REMOVE'
        );

        $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
        $config->setProxyDir(__DIR__ . '/../ORM/Definition/Doctrine2/Entity/Proxy');
        $config->setProxyNamespace('Database\ORM\Definition\Doctrine2\Entity\Proxy');
        $config->setAutoGenerateProxyClasses($autoGenerateProxyClasses);

        $this->entityManager = EntityManager::create($dbParams, $config);

任何帮助将不胜感激, 亨德里克

2 个答案:

答案 0 :(得分:0)

我使用以下代码生成代理:

$em = Zend_Registry::get('em');
    $proxyFactory = $em->getProxyFactory();
    $metadatas = $em->getMetadataFactory()->getAllMetadata();
    $proxyFactory->generateProxyClasses($metadatas, APPLICATION_PATH . '/models/Proxies');

我在模型文件夹中有Proxies文件夹。

尝试使用此代码生成代理。

答案 1 :(得分:0)

发现了这个问题。但我不确定,如果它是权限或用户。但我将文件夹从775更改为777,也是用户。现在它有效:)