Doctrine не отображает поля из FOSUserBundle и FOSOAuthServerBundle

Я использую Symfony 2.8, FOSUserBundle 1.3 и FOSOAuthServerBundle 1.5

Для того, чтобы все классы, необходимые для этих Пакетов, работали, я пришел к выводу, что доктрина не обновляет мою схему должным образом. Я имею в виду, что он не учитывает поля из базового класса.

CREATE TABLE oauh2_access_tokens (id INT NOT NULL, client_id INT NOT NULL, user_
id INT DEFAULT NULL, PRIMARY KEY(id));
    CREATE TABLE oauth2_auth_codes (id INT NOT NULL, client_id INT NOT NULL, user_id
 INT DEFAULT NULL, PRIMARY KEY(id));
CREATE TABLE oauth2_clients (id INT NOT NULL, PRIMARY KEY(id));
CREATE TABLE oauth2_refresh_tokens (id INT NOT NULL, client_id INT NOT NULL, use
r_id INT DEFAULT NULL, PRIMARY KEY(id));

Вот мой конфиг:

doctrine:
    orm:
        #auto_generate_proxy_classes: "%kernel.debug%"
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore
                mappings:
                    COMPANYAuthBundle: ~

fos_user:
    db_driver: orm
    firewall_name: api
    user_class: COMPANY\AuthBundle\Entity\User

#FOSOAuthBundle Configuration
fos_oauth_server:
    db_driver: orm
    client_class: COMPANY\AuthBundle\Entity\Client
    access_token_class: COMPANY\AuthBundle\Entity\AccessToken
    refresh_token_class: COMPANY\AuthBundle\Entity\RefreshToken
    auth_code_class: COMPANY\AuthBundle\Entity\AuthCode
    service:
        user_provider: fos_user.user_manager

И вот мой класс пользователя

<?php

namespace COMPANY\AuthBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Entity\User as BaseUser;

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

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

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }
}

Итак, да, я правильно использовал, а не FOS\UserBundle\Model\User as BaseUser;

То же самое для класса OAuthServerBundle: (я просто помещаю один здесь, они все следуют одному и тому же шаблону)

<?php

namespace COMPANY\AuthBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use FOS\OAuthServerBundle\Entity\Client as BaseClient;

/**
 * Client
 *
 * @ORM\Table(name="oauth2_clients")
 * @ORM\Entity(repositoryClass="COMPANY\AuthBundle\Repository\ClientRepository")
 */
class Client extends BaseClient
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;


    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    public function __construct()
    {
        parent::__construct();
    }
}

У кого-нибудь есть идея, почему поля базового класса не помещаются в мою базу данных? Спасибо:)

1 ответ

Решение

Хорошо, я нашел решение после 10 часов поиска...

И решение состоит в том, чтобы не забыть добавить FOSUserBundle и FOSOAuthServerBundle и все пакеты базовых классов к вашему отображению.....

Так что это должен быть конфиг:

doctrine:
orm:
    #auto_generate_proxy_classes: "%kernel.debug%"
    default_entity_manager: default
    entity_managers:
        default:
            connection: default
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                COMPANYAuthBundle: ~
                FOSUserBundle: ~
                FOSOAuthBundle: ~

Кроме того, вы не можете сделать связку из комплекта, если хотите использовать маршруты каждого, поэтому создайте два по одному комплекту для каждого. Затем в каждом классе Buncle добавьте следующую функцию:

public function getParent()
{
    return "FOSOAuthServerBundle";  //Or return "FOSUserBundle"; but you can't put both
}
Другие вопросы по тегам