【问题标题】:Extended FOSUserBundle Not Creating Base Entities扩展 FOSUserBundle 不创建基础实体
【发布时间】:2016-06-14 21:02:22
【问题描述】:

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

php app/console dictionary: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 用户或组实体显示为正在映射。它确实显示了我们的用户类,但扩展似乎没有引入基本属性。

感谢您的帮助。

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    与升级问题的常见情况一样,问题是依赖不正确。

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

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

    解决了这个问题。我们的原则版本不正确,并且错误地将 FOSUserBundle 父类标识为“瞬态”,因此它没有被编译到元数据数组中。

    在更新 composer.json 文件并运行 composer update 后,所有架构都正确生成并恢复了登录功能。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的 - 所有路由也在路由配置中。我们不使用“注册”路由,因此我们显式加载其他四个路由。即使通过“all.xml”路由加载,系统也会显示相同的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多