【问题标题】:How Can I add get container in form builder symfony?如何在表单构建器 symfony 中添加获取容器?
【发布时间】:2017-09-25 22:34:58
【问题描述】:

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

我想在表单生成器中使用 $get->container...

【问题讨论】:

标签: forms symfony symfony-forms


【解决方案1】:

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

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

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

protected $container;

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

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

希望对你有所帮助;)

【讨论】:

  • 仅当他们使用的是旧版本的 Symfony 时。时代变了。
【解决方案2】:

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

src/AppBundle/Form/TaskType.php

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

class TaskType extends AbstractType
{
    private $em;

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

    // ...
}

src/AppBundle/Resources/config/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']

【讨论】:

  • 我想从我的应用中获取存储库
  • 用在您的服务中注入 Repository 类的良好做法更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2017-08-06
相关资源
最近更新 更多