如何在表单生成器symfony中添加get容器?

时间:2017-09-25 22:34:58

标签: forms symfony symfony-forms

如何在表单构建器symfony中添加get容器?

我想在表单构建器中使用$ get->容器......

2 个答案:

答案 0 :(得分:1)

一个问题是将容器作为参数传递给控制器​​的FormType文件:

$form_type = new MyFormType($this->container);

在FormType文件中添加构造方法:

protected $container;

public function __construct($container)
{
    $this->container = $container;
}

然后您可以通过以下方式访问容器:'$ this-> container';

希望它会对你有所帮助;)

答案 1 :(得分:1)

将整个容器注入表单类型是一种不好的做法。请考虑仅为表单类型注入必需的依赖项。您可以简单地define your form type as a service并注入所需的依赖项。

的src /的appbundle /窗体/ TaskType.php

use Doctrine\ORM\EntityManagerInterface;
// ...

class TaskType extends AbstractType
{
    private $em;

    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }

    // ...
}

的src /的appbundle /资源/配置/ services.yml

services:
    AppBundle\Form\TaskType:
        arguments: ['@doctrine.orm.entity_manager']
        tags: [form.type]

注入存储库类有两种方法。第二种方法更干净。

注入EntityManager类并从EM获取存储库类:

$this->em->getRepository(User::class)

使用EM工厂将存储库类注册为服务,并将其注入表单类型:

  services:
    AppBundle\Repository\UserRepository:
      factory: ['@doctrine.orm.entity_manager', getRepository]
      arguments: ['AppBundle\Entity\User']