Symfony 覆盖FoSuser后提取用户属性
这是我的用户类,它扩展了FoSUser基本用户,我添加了nom和prenomSymfony 覆盖FoSuser后提取用户属性,symfony,twig,fosuserbundle,Symfony,Twig,Fosuserbundle,这是我的用户类,它扩展了FoSUser基本用户,我添加了nom和prenom class User extends BaseUser { /** * @ORM\Column(type="string", length=255) */ private $nom; /** * @ORM\Column(type="string", length=255) */ private $prenom; public fun
class User extends BaseUser
{
/**
* @ORM\Column(type="string", length=255)
*/
private $nom;
/**
* @ORM\Column(type="string", length=255)
*/
private $prenom;
public function __construct()
{
parent::__construct();
// your own logic
}
这是控制器
public function demandeBoutiqueAction(Request $request)
{
$user = new User();
$user=$this->get('security.token_storage')->getToken()->getUser();
$user = $this->getUser();
return $this->render('GestionBoutiquesBundle:Gestion:demande_boutique.html.twig', array('user'=>$user));
}
这就是观点
<h1>Nom:{{ usr.nom }}
Username:{{usr.username}}
</h1>
Nom:{{usr.Nom}
用户名:{{usr.Username}
我得到的结果是,usr.nom是空的
名称:
用户名:okk2
我保存nom和prenom没有问题,除了通过实体的存储库之外,是否还有其他方法提取它们?用户类的
$nom
字段是private
,因此{{usr.nom}
将不起作用(您无法访问对象的private
和protected
字段)
如果我们看一下,我们可以看到$username
字段是受保护的
,因此{{{usr.username}}
也不应该工作。但确实如此!为什么
这是因为BaseUser
类有一个返回$username
字段的
现在我们来看一下:
为了方便起见,foo.bar
在PHP上执行以下操作
图层:
- 检查
是否为数组和foo
是否为有效元素李>bar
- 如果不是,并且如果
是对象,请检查foo
是否为有效属性李>bar
- 如果不是,并且如果
是一个对象,请检查foo
是否是有效的方法(即使bar
是构造函数-使用bar
)李>\u construct()
- 如果不是,并且如果
是对象,请检查foo
是否为有效方法李>getBar
- 如果不是,并且如果
是一个对象,请检查foo
是否为有效方法李>isBar
- 如果不是,并且如果
是一个对象,请检查foo
是否为有效方法李>hasBar
- 如果不是,则返回一个
值null
- 检查
是否为数组和foo
是否为有效元素李>bar
- 如果不是,则返回一个
值null
{{usr.username}}
时,实际上无法访问受保护的
字段$username
(您不能访问,因为它不是公共的
)。相反,Twig在幕后使用getUsername()
方法
因此,要使{{usr.nom}
工作,请将此方法添加到用户
类中:
public function getNom() {
return $this->nom;
}
然后,Twig将首先尝试访问$nom
字段,但无法访问,因为该字段是private
。相反,Twig将使用getNom()
方法,因此{{usr.nom}}
应该可以工作