【问题标题】:Symfony 2.5.5 & FOSUserBundle: the class ... was not found in the chain configured namespacesSymfony 2.5.5 & FOSUserBundle:在链配置的命名空间中找不到类...
【发布时间】:2014-12-11 20:51:57
【问题描述】:

最近,我开始使用 Symfony2。现在我想向我的站点添加一个用户管理引擎。

但是我遇到了一个问题。这就是我正在做的:

  1. 就创建/安装一个基本的 Symfony2 项目而言:

    $ composer create-project symfony/framework-standard-edition path/ "2.5.*"
    $ mv path/* ./
    $ rm -r path/
    
  2. 好的,Symfony 2.5.5 到此为止。接下来,下载 FOSUserBundle 并创建一个自定义包:

    $ composer require friendsofsymfony/user-bundle '~2.0@dev'
    $ php app/console generate:bundle --namespace=Meiblorn/CoreBundle --format=yml
    
  3. 在 Meiblorn\CoreBundle\Framework\Domain 命名空间中创建 User 类

    /**
     * User: Meiblorn
     * Date: 15/10/14
     * Time: 20:17
     */
    
    namespace Meiblorn\CoreBundle\Framework\Domain;
    
    use FOS\UserBundle\Model\User as FOSUserBundleUser;
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * @ORM\Entity
     * @ORM\Table(
     *      name = "users"
     * )
     */
    class User extends FOSUserBundleUser {
    
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
    
        public function __construct() {
            parent::__construct();
            // your own logic
        }
    
    }
    
    ?>
    
  4. 配置 security.yml 和 config.yml。最后,我得到了这个:

    AppKernel.php

    $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
    
            new FOS\UserBundle\FOSUserBundle(),
    
            new Meiblorn\CoreBundle\MeiblornCoreBundle(),
    );
    

    config.yml

    imports:
        - { resource: parameters.yml }
        - { resource: security.yml }
    
    framework:
        #esi:             ~
        translator:      { fallback: "%locale%" }
        secret:          "%secret%"
        router:
            resource: "%kernel.root_dir%/config/routing.yml"
            strict_requirements: ~
        form:            ~
        csrf_protection: ~
        validation:      { enable_annotations: true }
        templating:
            engines: ['twig']
            #assets_version: SomeVersionScheme
        default_locale:  "%locale%"
        trusted_hosts:   ~
        trusted_proxies: ~
        session:
            # handler_id set to null will use default session handler from php.ini
            handler_id:  ~
        fragments:       ~
        http_method_override: true
    
    # Twig Configuration
    twig:
        debug:            "%kernel.debug%"
        strict_variables: "%kernel.debug%"
    
    # Assetic Configuration
    assetic:
        debug:          "%kernel.debug%"
        use_controller: false
        bundles:        [ ]
        #java: /usr/bin/java
        filters:
            cssrewrite: ~
            #closure:
            #    jar: "%kernel.root_dir%/Resources/java/compiler.jar"
            #yui_css:
            #    jar: "%kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar"
    
    # Doctrine Configuration
    doctrine:
        dbal:
            driver:   "%database_driver%"
            host:     "%database_host%"
            port:     "%database_port%"
            dbname:   "%database_name%"
            user:     "%database_user%"
            password: "%database_password%"
            charset:  UTF8
        orm:
            auto_generate_proxy_classes: "%kernel.debug%"
            auto_mapping: true
    
    # Swiftmailer Configuration
    swiftmailer:
        transport: "%mailer_transport%"
        host:      "%mailer_host%"
        username:  "%mailer_user%"
        password:  "%mailer_password%"
        spool:     { type: memory }
    
    fos_user:
        db_driver: orm
        firewall_name: prod
        user_class: Meiblorn\CoreBundle\Framework\Domain\User
    

    security.yml

    security:
            encoders:
                FOS\UserBundle\Model\UserInterface: sha512
    
            role_hierarchy:
                ROLE_ADMIN:       ROLE_USER
                ROLE_SUPER_ADMIN: ROLE_ADMIN
    
            providers:
                fos_userbundle:
                    id: fos_user.user_provider.username
    
            firewalls:
                prod:
                    pattern: ^/
                    form_login:
                        provider: fos_userbundle
                        csrf_provider: form.csrf_provider
                    logout:       true
                    anonymous:    true
                dev:
                    pattern: ^/(_(profiler|wdt)|css|images|js)/
                    security: false
    
            access_control:
                - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
                - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
                - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
                - { path: ^/admin/, role: ROLE_ADMIN }
    

这是问题

In browser:  http://localhost/test.meiblorn.com/web/app_dev.php/

MappingException: The class 'Meiblorn\CoreBundle\Framework\Domain\User' was not found in the chain configured namespaces FOS\UserBundle\Model
in /Library/WebServer/Documents/test.meiblorn.com/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php line 37
at MappingException::classNotFoundInNamespaces('Meiblorn\CoreBundle\Framework\Domain\User', array('FOS\UserBundle\Model')) in /Library/WebServer/Documents/test.meiblorn.com/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php line 113
at MappingDriverChain->loadMetadataForClass('Meiblorn\CoreBundle\Framework\Domain\User', object(ClassMetadata)) in /Library/WebServer/Documents/test.meiblorn.com/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php line 117
at ClassMetadataFactory->doLoadMetadata(object(ClassMetadata), object(ClassMetadata), false, array()) in /Library/WebServer/Documents/test.meiblorn.com/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php line 318

Doctrine 在调用doctrine:schema:update 时也不会为此映射创建表

请帮我解决这个异常


更新!如何修复

我的命名空间的最终配置

orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: false
        mappings:
            FOSUserBundle: ~
            MeiblornCoreBundle:
                type: annotation
                dir: %kernel.root_dir%/../src/Meiblorn/CoreBundle/Framework/Entity
                prefix: Meiblorn\CoreBundle\Framework\Entity
              # alias: MyModels
              # is_bundle: true

【问题讨论】:

    标签: symfony doctrine mapping fosuserbundle mappingexception


    【解决方案1】:

    首先你需要在你的 composer.js 中配置 psr-4 自动加载,例如

    "autoload": {
        "psr-4": {
          "Meiblorn\\CoreBundle\\": "src/Meiblorn/CoreBundle/"
        }
    },
    

    然后拨打composer dumpautoload

    其次,我相信 Doctrine 期望实体存在于文件夹 Entity/ 中,因此请尝试将您的模型:src/Meiblorn/CoreBundle/Framework/Domain/User.php 移动到 src/Meiblorn/CoreBundle/Entity/User.phpHow do I change symfony 2 doctrine mapper to use my custom directory instead of my Entity Directory under the bundle

    【讨论】:

    • 你好。问题出在“Framework\Domain”子文件夹中。当我将 'Meiblorn\CoreBundle\Framework\Domain\User' 移动到 'Meiblorn\CoreBundle\Entity\User' 时,它起作用了。
    • In question text 添加了问题解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2023-03-02
    • 2015-11-12
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多