2013-04-10 67 views
1

我正在使用FOSUserBundle。爲什麼__construct方法在FOSUserBundle的User Entity中不起作用?

這是User實體:

namespace Shop\UserBundle\Entity; 

use FOS\UserBundle\Entity\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; 

    protected $shop; 

    public function __construct() 
    { 
     $this->shop = 'shop'; 
     parent::__construct(); 
    } 

    public function getShop() 
    { 
     return $this->shop; 
    } 
} 

當我打電話getShop控制器:

$user = $this->getUser()->getShop() 

結果是空
爲什麼不__construct工作User類? 我預計將有「店」的字符串作爲默認

+0

確定'$這個 - >的getUser()'做什麼你認爲它呢?你不提供代碼,所以我只能假設它檢索一個現有的用戶而不是調用'new',因此''__construct()'不會被觸發。試試'$ user = new \ Shop \ UserBundle \ Entity \ User(); $ user-> getShop();'看看它是否工作... – dbrumann 2013-04-10 19:09:06

+0

是的。其作品。但是,如果我使用$ this-> getUser() - > getShop()它不起作用。但get_class($ this-> getUser()) - 'Shop \ UserBundle \ Entity \ User' – melnikoved 2013-04-10 20:11:21

+0

如下面的答案所述,您必須將該屬性添加到映射中。通過添加註釋,然後更新模式:'php app/console doctrine:schema:update --force'。否則,你的財產將不會被保存,因此當你檢索一個先前持久的用戶時將是空的。 – dbrumann 2013-04-11 16:49:58

回答

1

教義實體基本上__construct在最終用戶代碼直接調用。當從數據庫中提取實體時,Doctrine不使用構造 - 請檢查that question瞭解更多細節。如果需要,您可以通過添加映射將其保存在數據庫中。

+0

它在其他實體中如何工作? – melnikoved 2013-04-10 19:35:04

+0

這不適用於此用戶實體 – melnikoved 2013-04-10 19:35:32

2

你可以放一個回調iniatilize你的用戶。就在兩個註解@ORM \ HasLifecycleCallbacks爲實體和@ORM \餐後的方法。例如:

namespace Shop\UserBundle\Entity; 
use FOS\UserBundle\Entity\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 
/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
* @ORM\HasLifecycleCallbacks 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    protected $shop; 

    /** 
    * @ORM\PostLoad 
    */ 
    public function init() 
    { 
     $this->shop = 'shop'; 
     parent::init(); 
    } 

    public function getShop() 
    { 
     return $this->shop; 
    } 
} 
相關問題