Symfony 为什么_构造方法在FOSUserBundle中的用户实体中不起作用?

Symfony 为什么_构造方法在FOSUserBundle中的用户实体中不起作用?,symfony,fosuserbundle,construct,Symfony,Fosuserbundle,Construct,我用的是FOSUserBundle 这是用户实体: 在控制器中调用getShop时: $user = $this->getUser()->getShop() 结果为空 为什么构造在用户类中不起作用? 我希望将'shop'字符串作为默认值基本上u构造在条令中,实体直接在最终用户代码中调用。条令在从数据库获取实体时不使用构造-请查看更多详细信息。如果需要,您可以通过添加映射将其持久化到数据库中。基本上,条令实体中的构造直接在最终用户代码中调用。条令在从数据库获取实体时不使用构造-请查看

我用的是FOSUserBundle

这是用户实体:

在控制器中调用getShop时:

$user = $this->getUser()->getShop()
结果为空 为什么构造在用户类中不起作用?
我希望将'shop'字符串作为默认值

基本上u构造在条令中,实体直接在最终用户代码中调用。条令在从数据库获取实体时不使用构造-请查看更多详细信息。如果需要,您可以通过添加映射将其持久化到数据库中。

基本上,条令实体中的构造直接在最终用户代码中调用。条令在从数据库获取实体时不使用构造-请查看更多详细信息。如果需要,您可以通过添加映射将其持久化到数据库中。

您可以放置一个回调来初始化您的用户。只有两个注释@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;
    }
}

您可以放置回调以初始化用户。只有两个注释@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;
    }
}

你确定$this->getUser做了你认为它做的事情吗?您没有提供代码,因此我只能假设它检索现有用户,而不是调用new,因此预计不会触发_构造。尝试$user=new\Shop\UserBundle\Entity\user$用户->getShop;看看它是否有效…是的。这是工作。但是,如果我使用$this->getUser->getShop,它就不起作用了。但是get_class$this->getUser-'Shop\UserBundle\Entity\User'正如下面的答案所说,您必须将属性添加到映射中,例如,通过添加注释,然后更新schema:php应用程序/控制台原则:schema:update-force。否则,您的属性将不会保存,因此在检索以前持久化的用户时将为null。您确定$this->getUser执行您认为的操作吗?您没有提供代码,因此我只能假设它检索现有用户,而不是调用new,因此预计不会触发_构造。尝试$user=new\Shop\UserBundle\Entity\user$用户->getShop;看看它是否有效…是的。这是工作。但是,如果我使用$this->getUser->getShop,它就不起作用了。但是get_class$this->getUser-'Shop\UserBundle\Entity\User'正如下面的答案所说,您必须将属性添加到映射中,例如,通过添加注释,然后更新schema:php应用程序/控制台原则:schema:update-force。否则,将不会保存您的属性,因此在检索以前持久化的用户时,该属性将为null。