首页 > 解决方案 > Symfony:在链配置的命名空间中找不到类 XYZ

问题描述

现有的问题没有帮助。我仍在学习 Symfony 并建立一个现有项目。试图从我的应用程序目录运行教义固定装置。

./app/console doctrine:fixtures:load --env test

运行它会给我以下错误

运行命令“doctrine:fixtures:load --env test --em default”时抛出错误。消息:“在链配置的命名空间 _XyzProjectName\CalendarContext\Domain\Model、Integration\GetFeedbackBundle\Model、_XyzProjectName\AccountingProcessContext\Domain\Model、_XyzProjectName\CaseContext\Domain 中找不到类 'ClientPortal\GenericBundle\Document\Accountant'” {"exception":"[object] (Doctrine\Common\Persistence\Mapping\MappingException(code: 0): 在链配置的命名空间_XyzProjectName\CalendarContext\Domain\ 中找不到类'ClientPortal\GenericBundle\Document\Accountant'模型,Integration\GetFeedbackBundle\Model,_XyzProjectName\AccountingProcessContext\Domain\Model,

尝试持久化类对象时抛出此异常

'ClientPortal\GenericBundle\Document\Accountant'

这是我在 config.yml 中的教义

doctrine:
dbal:
    driver:   pdo_pgsql
    host:     '%database_host%'
    dbname:   '%database_name%'
    user:     '%database_user%'
    password: '%database_password%'
orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    auto_mapping: true
    mappings:
        CalendarBundle:
            prefix: '_XyzProjectName\CalendarContext\Domain\Model'
        IntegrationGetFeedbackBundle:
            prefix: 'Integration\GetFeedbackBundle\Model'
        AccountingProcessBundle:
            prefix: '_XyzProjectName\AccountingProcessContext\Domain\Model'
        CaseBundle:
            prefix: '_XyzProjectName\CaseContext\Domain'
        GenericBundle:
            type: "annotation"   
            prefix: 'ClientPortal\GenericBundle\Document'
            dir: 'src'
            is_bundle: false

引发此异常的代码段

    $account = new ClientPortal\GenericBundle\Document\Accountant();//full namespace added for clarity - also this file lies in the same directory structure. 
    $account->setSfAccountantId($accountantId);
    $account->setUsername($username);
    $manager = new ObjectManager;
    $manager->persist( $account ); //This throws the above mentioned exception

我的想法是,文件 ClientPortal\GenericBundle\Document\Accountant.php 正在自动加载,因为在其对象实例化时没有抛出异常。但是,配置或映射缺少一些东西,因为学说不知道如何持久化其对象。

[源码][1] 会计类

在 AppKernel 下注册的 GenericBundle(s)

new Website\GenericBundle\WebsiteGenericBundle(),
new Admin\GenericBundle\AdminGenericBundle(),
new ClientPortal\GenericBundle\ClientPortalGenericBundle(),
new TaxApp\GenericBundle\TaxAppGenericBundle(),

标签: symfony

解决方案


因此,正如我在评论中建议的那样 - 尝试ClientPortal\GenericBundle\Document\在您的学说配置文件中添加命名空间到映射,如下所示:

#...
orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    mappings:
        # ...
        ClientPortalGenericBundle:
            type: annotation
            prefix: 'ClientPortal\GenericBundle\Document\'
            dir: '%kernel.root_dir%/src/ClientPortal/GenericBundle/Document/'
            #is_bundle: false
    auto_mapping: true

推荐阅读