我正在使用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'字符串作为默认值
答案 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以获取更多详细信息。如果需要,可以通过添加映射将其保留在数据库中。