Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按所有者/当前用户筛选EntityType_Php_Symfony - Fatal编程技术网

Php 按所有者/当前用户筛选EntityType

Php 按所有者/当前用户筛选EntityType,php,symfony,Php,Symfony,我在表单中有一个EntityType字段: $builder->add('site') 现在所有的站点都显示在下拉列表中,但我只想显示属于当前用户的站点 应用程序逻辑是有很多用户,每个用户只能管理自己的站点(Site::user是@ORM\manytone(targetEntity=“user”,inversedBy=“sites”)) 我知道我可以使用query\u builder——但是在表单中获取当前用户的最佳方法是什么?要获取表单中的当前用户对象(或id),实际上有多种方法。一种

我在表单中有一个EntityType字段:

$builder->add('site')
现在所有的站点都显示在下拉列表中,但我只想显示属于当前用户的站点

应用程序逻辑是有很多用户,每个用户只能管理自己的站点(Site::user是
@ORM\manytone(targetEntity=“user”,inversedBy=“sites”)


我知道我可以使用
query\u builder
——但是在表单中获取当前用户的最佳方法是什么?

要获取表单中的当前用户对象(或id),实际上有多种方法。一种是通过表单的选项进行设置

$form = $this->createForm(MyFormType::class, $obj, [
    'user' => $this->getUser(),
]);
并使用默认值
null
启用该选项,如下所示

class MyFormType extends AbstractType
{

    public function configureOptions(OptionsResolver $resolver)
    {
            $resolver->setDefaults([
                    'data_class' => '...',
                    'user' => null,
            ]);
    }
现在,您可以在
buildForm()
中使用
$options['user']
(使用前请确保检查它是否为
null


但是这样你就必须自己注入用户——为什么不让Symfony来处理呢?首先,在services.yml中将您的表单注册为服务

app.form.myform:
    class: AppBundle\Form\MyFormType
    arguments: ["@security.token_storage"]
    tags:
        - { name: form.type }
你看,我已经添加了另一个参数:
@security.token\u storage
参数。现在在表单中,添加一个构造函数

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;

class MyFormType extends AbstractType
{

    protected $tokenStorage;

    public function __construct(TokenStorageInterface $tokenStorage)
    {
            $this->tokenStorage = $tokenStorage;
    }
buildForm()中检索用户

$user = $this->tokenStorage->getToken()->getUser();

非常感谢。对于第一个解决方案,我得到了
选项“user”不存在。
。我已经将user添加为$obj的属性(
$obj->user=$this->getUser()
,在调用createForm之前)@我已经更新了我的答案,当然你需要启用该选项才能使用它。