2016-08-26 71 views
0

我有3個類(審計員,客戶端和管理器),它們擴展了FOS\UserBundle\Model\User和幾個輸入表單來創建每種類型。無法登錄在Symfony2中擴展FOS

例如,對於審計類(其他都是以同樣的方式):

/** 
* @ORM\Entity 
* @ORM\Table(name="auditor") 
*/ 
class Auditor extends BaseUser implements NotificationInterface 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue 
    * @ORM\Column(type="integer") 
    */ 
    protected $id; 

當我創建一個新的審計它工作正常,它創建的審計表,一切正常。但是,當我嘗試登錄它不起作用。另外,如果我通過php app/console app:list-users命令查看FOS用戶,則不會顯示新的審計員用戶。

我在做什麼錯?

回答

0

因爲我不想使用另一個外部捆綁包,我嘗試用另一種方式解決問題,然後我想出了這個終於可用的解決方案。

我以這種方式擴展FOS用戶實體:

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

    /** 
    * @ORM\Table(name="fos_user") 
    * @ORM\InheritanceType("JOINED") 
    * @ORM\DiscriminatorColumn(name="discr", type="string") 
    * @ORM\DiscriminatorMap({"user" = "User","subscriber" = "Subscriber", "client" = "Client", "company" = "Company"}) 
    * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository") 
    * 
    */ 
    class User extends BaseUser 
    { 
     /** 
     * @ORM\Id 
     * @ORM\Column(type="integer") 
     * @ORM\GeneratedValue(strategy="AUTO") 
     */ 
     protected $id; 

然後在每個子類(用戶,客戶和公司),我擴展這個子類太(3層次結構計數FOS用戶)。我粘貼下面其中之一(同爲其他人):

use AppBundle\Entity\User as MyUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity(repositoryClass="AppBundle\Repository\ClientRepository") 
* @ORM\Table(name="client") 
*/ 
class Client extends MyUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

希望這將幫助任何人......

+0

不錯的辦法。我們如何爲不同的用戶提供不同的訪問控制? – TRiNE

1

雖然您已將類別從BaseUser級擴展,但您不能在FOSUserBundle中使用多個類登錄。檢查您的app/config/config.yml文件。

fos_user: 
    db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel' 
    firewall_name: main 
    user_class: AppBundle\Entity\User 

這裏您只定義了一個類作爲fos_user。

使用PUGXMultiUserBundle爲您的需求。

PUGXMultiUserBundle擴展了FOSUserBundle,添加了處理不同類型用戶的功能。