Symfony 2.5.5 & FOSUserBundle: класс... не найден в пространствах имен, сконфигурированных для цепочки
Недавно я начал работать с Symfony2. Теперь я хочу добавить механизм управления пользователями на мой сайт.
Но я столкнулся с проблемой. Это то, что я делаю:
С точки зрения создания / установки базового проекта Symfony2:
$ composer create-project symfony/framework-standard-edition path/ "2.5.*" $ mv path/* ./ $ rm -r path/
Хорошо, так много для Symfony 2.5.5. Затем загрузите FOSUserBundle и создайте пользовательский пакет:
$ composer require friendsofsymfony/user-bundle '~2.0@dev' $ php app/console generate:bundle --namespace=Meiblorn/CoreBundle --format=yml
Создайте класс User в пространстве имен Meiblorn\CoreBundle\Framework\Domain
/** * 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 } } ?>
Настройте 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
1 ответ
Сначала вам нужно настроить автозагрузку psr-4 в вашем composer.js, например
"autoload": {
"psr-4": {
"Meiblorn\\CoreBundle\\": "src/Meiblorn/CoreBundle/"
}
},
Тогда позвони composer dumpautoload
,
Во-вторых, я полагаю, что Doctrine ожидает, что сущности будут жить в папке Entity/
так что попробуем переместить вам модель: src/Meiblorn/CoreBundle/Framework/Domain/User.php
в src/Meiblorn/CoreBundle/Entity/User.php
или Как мне изменить Symfony 2 Doctrine Mapper, чтобы использовать мой собственный каталог вместо моего Entity Directory в комплекте