Php Symfony2:如何在不覆盖要编辑的实体的情况下将当前用户发送到编辑表单?

Php Symfony2:如何在不覆盖要编辑的实体的情况下将当前用户发送到编辑表单?,php,forms,symfony,Php,Forms,Symfony,好的,所以我需要访问表单中当前用户的角色,以便根据角色查询不同的内容,在创建新用户时它可以正常工作。将登录用户作为$options发送到表单。。。但是,我注意到在编辑表单时,$options中的$data选项是要编辑的实体 如何在不覆盖任何实体的情况下将当前用户发送到实体进行编辑 我试着这样做: $current_user = $this->get('security.context')->getToken()->getUser(); $form = $this

好的,所以我需要访问表单中当前用户的角色,以便根据角色查询不同的内容,在创建新用户时它可以正常工作。将登录用户作为$options发送到表单。。。但是,我注意到在编辑表单时,$options中的$data选项是要编辑的实体

如何在不覆盖任何实体的情况下将当前用户发送到实体进行编辑

我试着这样做:

$current_user = $this->get('security.context')->getToken()->getUser();
        $form = $this->createForm(new UserType(), $entity, array(
            'action' => $this->generateUrl('user_update', array('id' => $entity->getId())),
            'method' => 'POST',
            'data' => $current_user,
        ));
但是“data”选项似乎覆盖了我上面发送的$entity


如何发送两者?

我认为要实现更高的质量级别,您需要将表单类型声明为服务,并将SecurityContext对象作为依赖项接收,如下所示:

services:
    form.type.user:
        class: Acme\DemoBundle\Form\Type\UserType
        arguments: ["@security.context"]
        tags:
            - { name: form.type, alias: user_type } 
class UserType extends AbstractType {


    private $securityContext;

    public function __construct(SecurityContext $securityContext)
    {
        $this->securityContext = $securityContext;
    }
}
$form = $this->createForm($this->get('form.type.user'), $data);
并按如下方式声明表单类型:

services:
    form.type.user:
        class: Acme\DemoBundle\Form\Type\UserType
        arguments: ["@security.context"]
        tags:
            - { name: form.type, alias: user_type } 
class UserType extends AbstractType {


    private $securityContext;

    public function __construct(SecurityContext $securityContext)
    {
        $this->securityContext = $securityContext;
    }
}
$form = $this->createForm($this->get('form.type.user'), $data);
通过这种方式,您可以通过SecurityContext对象访问用户,该对象将由Symfony自动注入

创建如下表单:

services:
    form.type.user:
        class: Acme\DemoBundle\Form\Type\UserType
        arguments: ["@security.context"]
        tags:
            - { name: form.type, alias: user_type } 
class UserType extends AbstractType {


    private $securityContext;

    public function __construct(SecurityContext $securityContext)
    {
        $this->securityContext = $securityContext;
    }
}
$form = $this->createForm($this->get('form.type.user'), $data);

将用户添加到实体,而不是数据。我不理解您所说的“将用户添加到实体”是什么意思,要编辑的实体也是一个用户实例。因此,您只需将当前用户暴露到表单中即可?对不起,我不理解您的问题