这是一个教义错误吗?需要不存在的文件


Is this a Doctrine bug ? Requiring a non-existent file

我正在逐步遵循教义入门教程,我几乎完成了它。但令人惊讶的是,在接近尾声时,我遇到一个奇怪的问题。

我无法让show_bug.php脚本工作,即使几乎相同 show_product.php脚本就像一个魅力。当我尝试使用该show_bug.php脚本时,没有给出错误消息(即使使用 ini_set(‘display_errors’, ‘On’);error_reporting(E_ALL); (,并且不会引发异常,但是"什么都没有"发生,也没有采取预期的行动。

在我的调试器的帮助下,我能够更精确地定位问题:编译器在 的第 211 行突然退出 vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php

这一行的内容是

require $fileName;

而$fileName的值是/var/folders/n2/_p480vgx4dx4rkk0prvbsbsr0000gn/T/__CG__User.php,我的系统上不存在文件。

这是回溯堆栈:

Doctrine'Common'Proxy'AbstractProxyFactory->getProxyDefinition()
in vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php
Doctrine'Common'Proxy'AbstractProxyFactory->getProxy()
in vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php
Doctrine'ORM'UnitOfWork->createEntity()
in vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php
Doctrine'ORM'Internal'Hydration'SimpleObjectHydrator->hydrateRowData()
in vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php
Doctrine'ORM'Internal'Hydration'SimpleObjectHydrator->hydrateAllData()
in vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php
Doctrine'ORM'Internal'Hydration'AbstractHydrator->hydrateAll()
in vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php
Doctrine'ORM'Persisters'BasicEntityPersister->load()
in vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php
{main}()
in show_bug.php

任何帮助表示赞赏。

更新:正如Martin的回答中所建议的,我在项目目录中创建了一个Proxies子目录,并修改了bootstrap.php文件的内容,如下所示:

<?php
// bootstrap.php
use Doctrine'ORM'Tools'Setup;
use Doctrine'ORM'EntityManager;
require_once "vendor/autoload.php";
$paths = array("src/");
$isDevMode = false;
// the connection configuration
$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'root',
    'password' => 'root',
    'dbname'   => 'flea_database',
);
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$proxyDir='/Users/ewandelanoy/Documents/Math_Software/Symfony_stuff/flee_tracker/Proxies';
$config -> setProxyDir($proxyDir); 
$entityManager = EntityManager::create($dbParams, $config);

应用程序的行为没有改变:show_product.php有效,但show_bug.php什么都不做

尝试使用命令行生成代理文件。

php vendor/bin/doctrine.php orm:generate-proxies

这对我有帮助。

在我看来,

它无法创建代理类(也许您的脚本无权写入/var/folders(。看看配置:

在设置方法中,做了几个假设:

  • 如果未设置第三个参数$proxyDir,请使用系统临时目录。

尝试将$proxyDir设置为项目中的某个临时目录,并为其设置写入权限。