为什么__construct方法在FOSUserBundle中的用户实体中不起作用?

时间:2013-04-10 17:55:52

标签: symfony fosuserbundle construct

我正在使用FOSUserBundle。

这是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课程中工作? 我希望将'shop'字符串作为默认值

2 个答案:

答案 0 :(得分:3)

您可以进行回调以暂停用户。实体只有两个注释 @ORM \ HasLifecycleCallbacks ,方法只有 @ORM \ PostLoad 。例如:

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;
    }
}

答案 1 :(得分:1)

基本上,在最终用户代码中直接调用doctrine实体中的__construct。从数据库中获取实体时,Doctrine不使用构造 - 请查看that question以获取更多详细信息。如果需要,可以通过添加映射将其保留在数据库中。