我正在使用Zendframework 2的学说2
我正在尝试返回一个对象,但一直收到此错误:
您的代理目录必须是可写的
这是我的疑问:
$this->getEntityManager()
->getRepository('Messages\Entity\Messages')
->findOneBy(array('id' => 6,
'receiverId' => 16
));
但是,相同的查询返回一个没有任何问题的数组:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select(array('u'))
->from('Messages\Entity\Messages','u')
->where('u.id = :id')
->andWhere('u.receiverUserId = :receiverId')
->setParameter('receiverId',16)
->setParameter('id',(int)6);
$query = $qb->getQuery();
return $data = $query->getArrayResult();
答案 0 :(得分:4)
如果您使用的是Setup::createAnnotationMetadataConfiguration
,则可以通过
data/DoctrineORMModule/Proxy
chmod -R 755 data/DoctrineORMModule/Proxy
在您的引导程序中包括数据目录的路径,如:
Setup::createAnnotationMetadataConfiguration(array(__DIR__ . "/src/models"), $this->isDevMode, "data/DoctrineORMModule/Proxy")
为我修好了。
答案 1 :(得分:2)
代理是简单的类,它扩展了您的实际实体,并由doctrine内部使用,以通过lazy-loading来实现实体的关联。 Doctrine决定在运行时使用或不使用代理实例用于不同的情况,它实际上取决于您的实体中的查询和关联。您可能希望在official documentation深入了解此主题。
在您的情况下,学习尝试为您的Messages
实体生成代理类,但您的代理目录根本不可写,因为错误输出表示。
这似乎是DoctineModule的错误配置。 (假设您使用DoctrineORMModule将教义与ZF2集成)Doctrine需要一个可写目录来放置生成的代理类。对于ZF2的观点,应用程序根目录上的data
目录完全符合此要求。
确保public/index.php
:
chdir(dirname(__DIR__));
并尝试使用如下配置:
<?php
/**
* module/Application/config/module.config.php
*/
return array(
'router' => array(
// ...
),
// ...
'doctrine' => array(
'driver' => array(
//...
),
/**
* Generating proxies on runtime and using array cache instead of apc(u)
* greatly reduces the performance. So, you may want to override
* this settings on production environment.
*/
'configuration' => array(
'orm_default' => array(
'metadata_cache' => 'array',
'query_cache' => 'array',
'result_cache' => 'array',
'hydration_cache' => 'array',
'generate_proxies' => true,
'proxy_dir' => 'data/DoctrineORMModule/Proxy',
'proxy_namespace' => 'DoctrineORMModule\Proxy',
),
),
)
);
答案 2 :(得分:0)
如果您使用的是Fedora 24,请输入以下命令:
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/YOUR_SITE/data';
restorecon -v '/var/www/html/YOUR_SITE/data'
有了这个,您正在更改/var/www/html
的标签并向httpd
提供写入权限。