我正在逐步完成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什么都不做
答案 0 :(得分:2)
在我看来,它无法创建代理类(也许您的脚本没有权限写入/var/folders
)。看看configuration:
在Setup方法中,做了几个假设:
...
如果未设置第三个参数$ proxyDir,请使用系统临时目录。
尝试将$proxyDir
设置为项目中的某个临时目录,并为其设置写入权限。
答案 1 :(得分:1)
尝试使用命令行生成代理文件。
php vendor/bin/doctrine.php orm:generate-proxies
这帮助了我。