Базата данни не се актуализира с FOSUserBundle

Опитвам се да инсталирам SonataAdminBundle в моето приложение Symfony2 и изглежда, че работи добре с изключение на UserBundle. Не се актуализира в базата данни. Когато правя:

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.

Това е моят файл app/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

и моя файл app/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 }

Файлът app/logs/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' [] []

person Manolo    schedule 25.08.2013    source източник


Отговори (3)


Знам, стар въпрос, но току-що имах същия проблем. За мен решението беше да добавя следното към пакети Appkernel:

нов Sonata\EasyExtendsBundle\SonataEasyExtendsBundle(),

нов Sonata\UserBundle\SonataUserBundle('FOSUserBundle'), // 'FOSUserBundle' не е задължителен

След това се натъкнах на нов проблем, получих [Doctrine\DBAL\DBALException] Неизвестен тип колона поиска "json" .... Това беше коригирано от следното в config.yml

доктрина:

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

Надявам се това да помогне на някого.

person roelleor    schedule 24.09.2014

Във вашия 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

person TautrimasPajarskas    schedule 25.08.2013
comment
Всъщност ние разширяваме FOS\UserBundle\Entity\User as BaseUser. Може би това ще помогне. Също така опитайте да разширите FOSUserBundle, като използвате командата SonataEasyExtendsBundle. Освен това опитайте първо да разширите Sonata\UserBundle\Model\User. Когато това работи, преминете към FOSUserBundle - person TautrimasPajarskas; 26.08.2013
comment
Е, можете да видите под използване на FOS\UserBundle\Model\User като BaseUser; с които се опитах да използвам Sonata\UserBundle\Model\User като BaseUser;. Разширяване на FOSUserBundle с помощта на SonataEasyExtendsBundle? Предпочитам да не променям пакетите на трети страни, тъй като се предполага, че можете да ги разширите във вашите собствени пакети. - person Manolo; 26.08.2013
comment
Предложих ви да удължите Entity, а не Model. И SonataEasyExtendsBundle само разширява даден пакет, но не го променя. - person TautrimasPajarskas; 26.08.2013
comment
Добре. Но Entity не работи. Всъщност док казва да се сложи модел. Как се предполага да се разшири SonataEasyExtendsBundle? - person Manolo; 26.08.2013
comment
Намерих тази грешка в app/logs/dev.log: ./app/logs/dev.log:[2013-08-27 10:46:43] request.CRITICAL: Uncaught PHP Exception ReflectionException: Class Application\Sonata \UserBundle\Entity\User не съществува в /home/manolo/MiServer/HoHa/vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php ред 199 {exception:[object] (ReflectionException: Class Application\ \Sonata\\UserBundle\\Entity\\User не съществува в /home/manolo/MiServer/HoHa/vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php:199)} [] - person Manolo; 27.08.2013

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

Преименувах Resources/config/doctrine с Resources/config/doctrine.bak и User.php в ApplicationSonataUserBundle вече е моят Entity.

person xandrucancelas    schedule 19.03.2017