1

我正在使用 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()

结果为null
为什么__constructUser课堂上不起作用?我希望将“商店”字符串作为默认值

4

2 回答 2

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;
    }
}
于 2014-01-14T20:31:22.823 回答
1

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

于 2013-04-10T19:12:32.460 回答