【问题标题】:Zend Framework 2 + Doctrine ODM, "The Class was not found in the chain configured namespaces" error?Zend Framework 2 + Doctrine ODM,“在链配置的命名空间中找不到类”错误?
【发布时间】:2012-09-14 10:45:50
【问题描述】:

在设置 ZF2 + ODM 时,我收到以下错误:

The class 'Application\Document\User' was not found in the chain configured namespaces 

目前的设置如下:

ZF2 稳定,通过 composer.phar 与 composer.json 内容安装的学说 ODM

{
    "name": "zendframework/skeleton-application",
    "description": "Skeleton Application for ZF2",
    "license": "BSD-3-Clause",
    "keywords": [
        "framework",
        "zf2"
    ],
    "homepage": "http://framework.zend.com/",
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.0.0",
        "doctrine/doctrine-mongo-odm-module": "dev-master"
    }
}

加载的模块

'modules' => array(
    'Application',
    'DoctrineModule',
    'DoctrineMongoODMModule',
),

Hydrator 和代理目录被创建

$ ls -l data/DoctrineMongoODMModule/
total 0
drwxrwxrwx  2 wisu  staff  68 Sep 12 08:34 Hydrators
drwxrwxrwx  2 wisu  staff  68 Sep 12 08:35 Proxy

odm 配置看起来像

'driver' => array(
    'odm_default' => array(
        'drivers' => array(
            'Application\Document' => 'aplikasi'
        )
    ),
    'aplikasi' => array(
        'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
        'cache' => 'array',
        'paths' => array(
            'module/Application/src/Application/Document'
        )
    )
),

我正在尝试使用以下映射

<?php

namespace Application\Document;

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

/** @ODM\Document(collection="user") */
class User
{
    /** @ODM\Id */
    private $id;

    /** @ODM\Field(type="string") */
    private $name;

    /**
     * @return the $id
     */
    public function getId() {
        return $this->id;
    }

    /**
     * @return the $name
     */
    public function getName() {
        return $this->name;
    }

    /**
     * @param field_type $id
     */
    public function setId($id) {
        $this->id = $id;
    }

    /**
     * @param field_type $name
     */
    public function setName($name) {
        $this->name = $name;
    }

}

但是通过调用它

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Application\Document\User;

class IndexController extends AbstractActionController
{
    public function indexAction()
    {

        $dm = $this->getServiceLocator()->get('doctrine.documentmanager.odm_default');

        $user = new User();
        $user->setName("Gembul");

        $dm->persist($user);
        $dm->flush();

        return new ViewModel();
    }
}

任何指针?

【问题讨论】:

  • 我认为提供的答案不正确。其他人对问题可能是什么有任何想法?

标签: mongodb doctrine-orm zend-framework2 doctrine-odm odm


【解决方案1】:

真正的解决方案是不将 module.doctrine-mongo-odm.local.php 添加到 autoload 目录中,这行对我来说是配置

    'driver' => array(          
        'ODM_Driver' => array(
            'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',
            'paths' => array(__DIR__ . '/../../module/Application/src/Application/Doctrine/Document')
        ),
        'odm_default' => array(
            'drivers' => array(
                'Application\Doctrine\Document' => 'ODM_Driver'
            )
        ),
    ),

【讨论】:

    【解决方案2】:

    此安装适用于当前版本: ZF2, MongoDB, and Doctrine installation

    将 odm 的默认配置文件复制到我们的配置目录。然后,您需要根据您的服务器规范修改 module.doctrine-mongo-odm.local.php。这是您设置服务器主机、端口、用户名和密码的配置文件。例如,我们将假设一切都在同一台本地机器上运行并且不进行任何修改。

    这是一个适用于混合解决方案 ORM / ODM 的应用程序 module.config.php

    'doctrine' => array(
        'driver' => array(
            'orm_driver' => array(
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
            ),
            'orm_default' => array(
                'drivers' => array(
                    __NAMESPACE__ . '\Entity' => 'orm_driver'
                )
            ),
            'odm_driver' => array(
                'class' => 'Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver',          
                'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Document')
            ),
            'odm_default' => array(
                'drivers' => array(
                    __NAMESPACE__ . '\Document' => 'odm_driver'
                )
            )                   
        )
    )  
    

    【讨论】:

      【解决方案3】:

      发现问题了……

      配置文件 module.doctrine-mongo-odm.local.php 不在 autoload 目录下...

      【讨论】:

      • 您确定这确实是解决方案吗?我在使用 DoctrineORMModule 时遇到了同样的问题。我尝试将教义配置数组放在全局级别,并从模块级别调用它,但我总是遇到同样的错误。
      猜你喜欢
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2023-03-02
      相关资源
      最近更新 更多