扩展的FOSUserBundle不创建基本实体

时间:2016-06-14 21:02:23

标签: php symfony doctrine-orm

我们的项目已从Symfony 2.1迁移到2.3,现在已迁移到2.7。 FOSUserBundle在2.1上创建了它自己的属性,但在后来的版本中却没有。

php app / console doctrine:schema:update实际上导致命令删除现有用户名,usernameCanonical等字段。

此外,在尝试使用我们的登录表单登录时,我们得到:

"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AuthenticationServiceException(code: 0): Unrecognized field: usernameCanonical at .../vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/DaoAuthenticationProvider.php:94

系统似乎不知道我们的扩展基础用户附带的FOSUserBundle实体。

我已将扩展用户类减少为默认值作为测试,仍然会遇到相同的问题。这是当前的代码和配置:

config.yml

    orm:
        #default_entity_manager: ~
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true
        result_cache_driver:
            type: memcached
            host: 127.0.0.1
            port: 11211
            instance_class: Memcached
        metadata_cache_driver:
            type: memcached
            host: 127.0.0.1
            port: 11211
            instance_class: Memcached
        query_cache_driver:
            type: memcached
            host: 127.0.0.1
            port: 11211
            instance_class: Memcached
        filters:
            softdeleteable:
                class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
                enabled: true

        mappings:
            FOSUserBundle: ~

fos_user:
    db_driver: orm 
    firewall_name: main
    user_class: ODR\OpenRepository\UserBundle\Entity\User
    change_password:
        form:
            type: odr_user_change_password

security.yml

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            # Symfony >= 2.8
            # csrf_token_generator: security.csrf.token_manager
            # Symfony < 2.8
            csrf_provider: form.csrf_provider
        remember_me:
            key:      asdlkjf2ji802fiuaskdjokjhafsdjsfdjhjh
            lifetime: 1209600
            path:     /
            domain:   ~

用户类[src / ODR / OpenRepository / UserBundle / Entity / User.php]

namespace ODR\OpenRepository\UserBundle\Entity;

use FOS\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
    }
}

运行:

php app/console doctrine:mapping:info

不会将FOS用户或组实体显示为已映射。它确实显示了我们的用户类,但扩展名似乎没有引入基本属性。

感谢您的协助。

2 个答案:

答案 0 :(得分:1)

通常情况下,出现升级问题时,问题就是错误的依赖。

更新composer.json以包含所有正确的依赖项,如参考composer.json所示:

https://github.com/symfony/symfony-standard/blob/2.7/composer.json

解决了这个问题。我们的学说版本不正确,并错误地将FOSUserBundle父类识别为&#34; transient&#34;所以它没有编译成元数据数组。

更新composer.json文件并运行composer update后,所有正确生成的模式都已恢复。

答案 1 :(得分:0)

您是否已将fos路由添加到路由配置?