这是我的用户类扩展了FoSUser Base用户,我添加了nom和prenom
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>
我得到的结果就是这个,usr.nom是空的
喃:
用户名:okk2
我坚持使用nom和prenom没有问题,是否有提取它们,除非通过实体的存储库?
答案 0 :(得分:1)
$nom
课程的User
字段为private
,因此{{ usr.nom }}
无效(您无法访问private
和{{1}一个对象的字段)。
如果我们查看BaseUser
class,我们可以看到protected
字段为$username
,因此protected
也不应该有效。但确实如此!为什么?
这是因为{{ usr.username }}
班级有public
method getUsername()
on line 191,会返回BaseUser
字段。
现在让我们来看看Twig's documentation of variables:
为方便起见,
$username
在PHP上执行以下操作 层:另一方面,
- 检查
foo.bar
是否为数组,foo
是否为有效元素;- 如果没有,如果
bar
是对象,请检查foo
是否为有效财产;- 如果没有,如果
bar
是对象,请检查foo
是否为有效方法(即使bar
是构造函数 - 请改用bar
); < / LI>- 如果没有,如果
__construct()
是对象,请检查foo
是否为有效方法;- 如果没有,如果
getBar
是对象,请检查foo
是否为有效方法;- 如果没有,如果
isBar
是对象,请检查foo
是否为有效方法;- 如果没有,请返回
hasBar
值。
null
仅适用于PHP数组:
- 检查
foo['bar']
是否为数组,foo
是否为有效元素;- 如果没有,请返回
bar
值。
因此,当您在Twig中使用null
时,您实际上并未访问{{ usr.username }}
字段protected
(您不能,因为它不是$username
)。相反,Twig在幕后使用public
方法。
因此,要使getUsername()
有效,请将此方法添加到{{ usr.nom }}
类:
User
Twig将首先尝试访问public function getNom() {
return $this->nom;
}
字段,但不能,因为该字段为$nom
。相反,Twig将使用private
方法,因此getNom()
应该有效。