2013-08-25 2 views
2

Я пытаюсь установить SonataAdminBundle в приложение Symfony2 и, кажется, отлично работает, кроме UserBundle. Он не обновляется в базе данных. Когда я делаю:База данных не обновляется с помощью FOSUserBundle

php app/console doctrine:mapping:info 

он бросает мне следующий:

[OK] HoHa\UserBundle\Entity\User 
[OK] Sonata\UserBundle\Entity\BaseUser 
[OK] Sonata\UserBundle\Entity\BaseGroup 

И да, она отображается. Но поля не создаются (кроме id). Посмотрите на моем лице User.php:

<?php 

namespace HoHa\UserBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
#I've also tried: use Sonata\UserBundle\Model\User as BaseUser; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 


public function __construct() 
{ 
    parent::__construct(); 
    // your own logic 
} 

} 

Почему Пользователь не распространяется при обновлении базы данных? FOSUserBundle показывает страницу входа и регистрации, а Sonata также показывает страницу входа.

Когда я делаю:

$ php app/console doctrine:schema:update --force 

я получаю:

Nothing to update - your database is already in sync with the current entity metadata. 

Это мое приложение/Config/config.yml файл:

imports: 
     - { resource: parameters.yml } 
     - { resource: security.yml } 
     - { resource: @HoHaHomeBundle/Resources/config/admin.yml } 

    framework: 
     #esi:    ~ 
     translator:  ~ 
     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_proxies: ~ 
     session:   ~ 
     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.jar 
      yui_js: 
       'jar': %kernel.root_dir%/Resources/java/yuicompressor.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 
      # if using pdo_sqlite as your database driver, add the path in parameters.yml 
      # e.g. database_path: %kernel.root_dir%/data/data.db3 
      # path:  %database_path% 
      types: 
       json: Sonata\Doctrine\Types\JsonType 

     orm: 
      auto_generate_proxy_classes: %kernel.debug% 
      #auto_mapping: true 
      entity_managers: 
       default: 
        mappings: 
         HoHaUserBundle: ~ 
         SonataUserBundle: ~ 


    # Swiftmailer Configuration 
    swiftmailer: 
     transport: %mailer_transport% 
     host:  %mailer_host% 
     username: %mailer_user% 
     password: %mailer_password% 
     spool:  { type: memory } 

    sonata_block: 
     default_contexts: [cms] 
     blocks: 
      sonata.admin.block.admin_list: 
       contexts: [admin] 

      #sonata.admin_doctrine_orm.block.audit: 
      # contexts: [admin] 

      sonata.block.service.text: 
      sonata.block.service.rss: 

      # Some specific block from the SonataMediaBundle 
      #sonata.media.block.media: 
      #sonata.media.block.gallery: 
      #sonata.media.block.feature_media: 
    fos_user: 
     db_driver:  orm 
     firewall_name: main 
     user_class:  HoHa\UserBundle\Entity\User 

     group: 
      group_class: HoHa\UserBundle\Entity\Group 

    sonata_admin: 
     templates: 
      dashboard: SonataAdminBundle:Core:dashboard.html.twig 

и мое приложение/Config/security.yml файл:

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 
     FOS\UserBundle\Model\UserInterface: sha512 

    role_hierarchy: 
     ROLE_ADMIN:  [ROLE_USER, ROLE_SONATA_ADMIN] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
     SONATA: 
      - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented 

    providers: 
     in_memory: 
      memory: 
       users: 
        user: { password: userpass, roles: [ 'ROLE_USER' ] } 
        admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } 
     fos_userbundle: 
      id: fos_user.user_manager 
      #id: fos_user.user_provider.username 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     # -> custom firewall for the admin area of the URL 
     admin: 
      pattern:   /admin(.*) 
      context:   user 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /admin/login 
       use_forward: false 
       check_path:  /admin/login_check 
       failure_path: null 
      logout: 
       path:   /admin/logout 
      anonymous:   true 

     # -> end custom configuration 

     # defaut login area for standard users 

     # This firewall is used to handle the public login area 
     # This part is handled by the FOS User Bundle 
     main: 
      pattern:    .* 
      context:    user 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /login 
       use_forward: false 
       check_path:  /login_check 
       failure_path: null 
      logout:    true 
      anonymous:   true 
     login: 
      pattern: ^/demo/secured/login$ 
      security: false 

     secured_area: 
      pattern: ^/demo/secured/ 
      form_login: 
       check_path: _security_check 
       login_path: _demo_login 
      logout: 
       path: _demo_logout 
       target: _demo 
      #anonymous: ~ 
      #http_basic: 
      # realm: "Secured Demo Area" 

    access_control: 
     # URL of FOSUserBundle which need to be available to anonymous users 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # Admin login page needs to be access without credential 
     - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # Secured part of the site 
     # This config requires being logged for the whole site and having the admin role for the admin part. 
     # Change these rules to adapt them to your needs 
     - { path: ^/admin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] } 
     - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 

Файл приложения/журналы/dev.log дает мне следующее:

[2013-08-26 17:40:27] doctrine.DEBUG: SELECT TABLE_NAME AS `Table`, NON_UNIQUE AS Non_Unique, INDEX_NAME AS Key_name, SEQ_IN_INDEX AS Seq_in_index, COLUMN_NAME AS Column_Name, COLLATION AS Collation, CARDINALITY AS Cardinality, SUB_PART AS Sub_Part, PACKED AS Packed, NULLABLE AS `Null`, INDEX_TYPE AS Index_Type, COMMENT AS Comment FROM information_schema.STATISTICS WHERE TABLE_NAME = 'fos_user' AND TABLE_SCHEMA = 'hoha' [] [] 

ответ

0

В вашем app/config/config.yml, попробуйте установить FOSUserBundle класс пользователя к своему усмотрению.

fos_user: 
    <...> 
    user_class: Acme\UserBundle\Entity\User # Your class here 

Источник: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md#step-5-configure-the-fosuserbundle

+0

Я уже установил его. – Manolo

+0

На самом деле мы расширяем 'FOS \ UserBundle \ Entity \ User as BaseUser'. Может быть, это поможет. Кроме того, попробуйте расширить FOSUserBundle с помощью команды 'SonataEasyExtendsBundle'. Кроме того, сначала попробуйте расширить «Sonata \ UserBundle \ Model \ User». Когда это работает, перейдите в FOSUserBundle – TautrimasPajarskas

+0

Ну, вы можете видеть в разделе «Использовать FOS \ UserBundle \ Model \ User as BaseUser;» что я пытался использовать «Sonata \ UserBundle \ Model \ User as BaseUser;». Расширить FOSUserBundle, используя SonataEasyExtendsBundle? Я предпочитаю не менять сторонние пакеты, так как предполагается, что вы можете расширить их в своих собственных пакетах. – Manolo

1

Я знаю, старый вопрос, но я только что это очень такая же проблема. Для меня решение было добавить следующее расслоения Appkernel:

новая Sonata \ EasyExtendsBundle \ SonataEasyExtendsBundle(),

новая Sonata \ UserBundle \ SonataUserBundle ('FOSUserBundle'), // 'FOSUserBundle' является по желанию

После того, что я столкнулся с новой проблемой, я получил [Учение \ DBAL \ DBALException] Неизвестный тип столбца «JSON» просил .... Это было зафиксировано следующее в config.yml

доктрина:

dbal:  
    types: 
     json: Sonata\Doctrine\Types\JsonType 

Надеюсь, это поможет кому угодно.

0

В моем случае xml предпочитал аннотации в ApplicationSonataUserBundle.

Я переименовал Resources/config/doctrine в Resources/config/doctrine.bak, а User.php в ApplicationSonataUserBundle теперь является моим Entity.

Смежные вопросы