2012-04-11 55 views
0

我試圖將FOSUserBundle與FpOpenIDBundle集成,但是當auth被接收時遇到了問題。 我得到錯誤Symfony 2.0帶有OpenID的FOSUserBundle

不支持「Alef \ UserBundle \ Entity \ User」的實例。

我的類看起來像這樣

<?php 

namespace Alef\UserBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\Common\Collections\Collection; 
use FOS\UserBundle\Entity\User as BaseUser; 
use FOS\UserBundle\Model\GroupInterface; 
use Doctrine\ORM\Mapping as ORM; 


/** 
* User Entity 
* 
* @ORM\Entity 
* @ORM\Table(name="alef_users") 
* 
* @author James Morris <[email protected]> 
* @package SecurityBundle 
*/ 
class User extends BaseUser implements \FOS\UserBundle\Model\GroupableInterface 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\ManyToMany(targetEntity="Alef\UserBundle\Entity\Group") 
    * @ORM\JoinTable(name="alef_user_groups", 
    *  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")} 
    *) 
    */ 
    protected $groups; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="firstname", type="string", length=255) 
    */ 
    protected $firstname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="lastname", type="string", length=255) 
    */ 
    protected $lastname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="facebookId", type="string", length=255) 
    */ 
    protected $facebookId; 

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

    public function serialize() 
    { 
     return serialize(array($this->facebookId, parent::serialize()));; 
    } 

    public function unserialize($data) 
    { 
     list($this->facebookId, $parentData) = unserialize($data); 
     parent::unserialize($parentData); 
    } 

    /** 
    * @return string 
    */ 
    public function getFirstname() 
    { 
     return $this->firstname; 
    } 

    /** 
    * @param string $firstname 
    */ 
    public function setFirstname($firstname) 
    { 
     $this->firstname = $firstname; 
    } 

    /** 
    * @return string 
    */ 
    public function getLastname() 
    { 
     return $this->lastname; 
    } 

    /** 
    * @param string $lastname 
    */ 
    public function setLastname($lastname) 
    { 
     $this->lastname = $lastname; 
    } 

    /** 
    * Get the full name of the user (first + last name) 
    * @return string 
    */ 
    public function getFullName() 
    { 
     return $this->getFirstName() . ' ' . $this->getLastname(); 
    } 

    /** 
    * @param string $facebookId 
    * @return void 
    */ 
    public function setFacebookId($facebookId) 
    { 
     $this->facebookId = $facebookId; 
     $this->setUsername($facebookId); 
     $this->salt = ''; 
    } 

    /** 
    * @return string 
    */ 
    public function getFacebookId() 
    { 
     return $this->facebookId; 
    } 

    /** 
    * @param Array 
    */ 
    public function setFBData($fbdata) 
    { 
     if (isset($fbdata['id'])) { 
      $this->setFacebookId($fbdata['id']); 
      $this->addRole('ROLE_FACEBOOK'); 
     } 
     if (isset($fbdata['first_name'])) { 
      $this->setFirstname($fbdata['first_name']); 
     } 
     if (isset($fbdata['last_name'])) { 
      $this->setLastname($fbdata['last_name']); 
     } 
     if (isset($fbdata['email'])) { 
      $this->setEmail($fbdata['email']); 
     } 
    } 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->facebookId = 0; 
    } 

} 

我知道這是繼承問題,因爲FpOpenId繼承原有symfony的安全用戶類,但FOSUSer沒有繼承它。有什麼辦法可以更新FPOpenIDBundle來實際使用它嗎?

+0

注意:如果你想保持你的理智,不要使用fpOpenID了。它沒有被更新一年,它會打破當前的PHP/Symfony2版本,因爲像getExtraInformation()這樣的重要方法已被棄用。 – Tom 2013-10-22 14:36:51

回答

0

礦的配置是這樣的:

use FOS\UserBundle\Model\User as BaseUser; 
use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Component\Security\Core\Role\RoleInterface; 
use Symfony\Component\Security\Core\User\UserInterface as SecurityUserInterface; 

class User implements UserInterface, GroupableInterface 
{ 
} 

我被改寫,因爲超自定義功能,整個班級。

只需添加

class User extends BaseUser implements UserInterface, GroupableInterface 

問候, 最大

+0

等什麼?你重寫了整個FoS用戶類? – Kaminari 2012-04-11 08:41:15

+0

FoS-User-class不是_that_ special(https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/User.php)。甚至在FoSUserBundle文檔中提到,您可以_can_(但不能__)擴展用戶類別'User'級別 – KingCrunch 2012-04-11 08:55:25

+0

?正如你所看到的,我擴展了'User'類,但FOS用戶類。但這還不夠。它需要是Symfony用戶類。 – Kaminari 2012-04-11 09:14:24

0
use FOS\UserBundle\Model\GroupableInterface; 
use FOS\UserBundle\Model\GroupInterface; 

class User extends BaseUser 
{ 
    public function addGroup(GroupInterface $group) 
    { 
     parent::addGroup($group); 
    } 
}