Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何正确地自动加载Doctrine ODM注释?_Php_Zend Framework_Mongodb_Doctrine Odm - Fatal编程技术网

Php 如何正确地自动加载Doctrine ODM注释?

Php 如何正确地自动加载Doctrine ODM注释?,php,zend-framework,mongodb,doctrine-odm,Php,Zend Framework,Mongodb,Doctrine Odm,尝试运行命令行工具w/odm:schema:create和 我遇到了如下错误: "[Semantical Error] The annotation "@Document" in class Company_Model_Auth was never imported. Did you maybe forget to add a "use" statement for this annotation?" and "[Semantical Error] The annotation "@Embedd

尝试运行命令行工具w/odm:schema:create和 我遇到了如下错误:

"[Semantical Error] The annotation "@Document" in class Company_Model_Auth was never imported. Did you maybe forget to add a "use" statement for this annotation?" and
"[Semantical Error] The annotation "@EmbeddedDocument" in class Company_Model_Auth was never imported. Did you maybe forget to add a "use" statement for this annotation?"
以及其他注释,基本上适用于每个注释

当我将“use\doctor\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument;”(或\Document)添加到文件时,它将工作并前进到下一个模型。然后,它会在下一个文件中抱怨缺少相同的类(Document/EmbeddedDocument和任何其他注释)。是否需要将use语句添加到每个文件中

以下是我构建DocumentManager的方式:

public function _initDm() 
{
        AnnotationDriver::registerAnnotationClasses();
        $config = new Configuration();
        $config->setProxyDir(APPLICATION_PATH . '/../data/Proxies');
        $config->setProxyNamespace('Proxies');
        $config->setHydratorDir(APPLICATION_PATH . '/../data/Hydrators');
        $config->setHydratorNamespace('Hydrators');
        $config->setMetadataDriverImpl(AnnotationDriver::create(APPLICATION_PATH . '/models'));     

        // Pull in mongo db connection options from application.ini
        $options = $this->getOption('mongo');
        $config->setDefaultDB($options['database']);

        // Create a DocumentManager and store in ZendRegistry
        $dm = DocumentManager::create(new Connection($this->_createMongoDbConnectionString($options)), $config);
        Zend_Registry::set('dm', $dm); 
}
我仔细检查了一下,./repos/doctrine/mongodb odm/lib/doctrine/odm/mongodb/Mapping/Annotations/doctrineanotations.php文件肯定会被命中,一旦找到正确的注释文件,就需要它

由编写器提供的版本:

"doctrine/common": "2.3.0-RC3",
"doctrine/mongodb": "1.0.1",
"doctrine/mongodb-odm": "1.0.0-BETA7",
"symfony/console": "2.1.*@dev",

如果有任何帮助,我将不胜感激,因为我认为我不必向每个文件添加use语句。

注释解析器确实要求在使用之前导入注释类。代替显式导入每个注释类,您可以执行以下操作(从中提取):


我已经找到了解决方案,但忘了发布。你得到奖品:)我应该每次都写这个样板吗?或者可以将其设置在配置中的某个位置?如果您将
use
语句称为“样板文件”,唯一的替代方法是在每个注释中指定FQCN(例如
条令\ODM\MongoDB\Mapping\Annotations\Id
条令\ODM\MongoDB\Mapping\Annotations\Field
)。注释解析器要求每个注释都有一个可解析的类名,并且它支持文件中
use
语句的别名。没有任何配置选项可以更改此要求。@MikeGraf,告诉我您有什么解决方案?@EmilSabitov它不比这里的一个好,是7年前的一个
<?php

namespace Documents;

use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;

/**
* @ODM\Document
*/
class User
{
    /** @ODM\Id */
    protected $id;

    /** @ODM\Field(type="string") */
    protected $username;

    // Other fields follow...
}