Symfony 覆盖FoSuser后提取用户属性

Symfony 覆盖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

这是我的用户类,它扩展了FoSUser基本用户,我添加了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>
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']仅适用于PHP数组:

  • 检查
    foo
    是否为数组和
    bar
    是否为有效元素
  • 如果不是,则返回一个
    null
因此,当您在Twig中使用
{{usr.username}}
时,实际上无法访问
受保护的
字段
$username
(您不能访问,因为它不是
公共的
)。相反,Twig在幕后使用
getUsername()
方法

因此,要使
{{usr.nom}
工作,请将此方法添加到
用户
类中:

public function getNom() {
    return $this->nom;
}
然后,Twig将首先尝试访问
$nom
字段,但无法访问,因为该字段是
private
。相反,Twig将使用
getNom()
方法,因此
{{usr.nom}}
应该可以工作