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

时间:2016-02-16 05:51:30

标签: php orm doctrine-orm doctrine

我正在逐步完成Getting Started with Doctrine教程, 我几乎完成了它。但令人惊讶的是,我接近尾声 遇到一个奇怪的问题。

我无法让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什么都不做

2 个答案:

答案 0 :(得分:2)

在我看来,它无法创建代理类(也许您的脚本没有权限写入/var/folders)。看看configuration

  

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

     
      
  • ...

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

  •   

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

答案 1 :(得分:1)

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

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

这帮助了我。