2016-11-23 116 views
0

我使用Symfony的2.8,1.3 FOSUserBundle和FOSOAuthServerBundle 1.5主义不映射从FOSUserBundle和FOSOAuthServerBundle

对于所有需要到这些集合类的工作领域,我结束了教义无法正常更新我的架构。我的意思是它没有考虑到基类的字段。

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 \型号\用户为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 
}