如何访问服务或配置从一种形式吗

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.4,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何访问服务或配置从一种形式吗

有时,你可能需要访问服务或其他配置表单类的内部。要做到这一点,你有2个选择:

1)通过选择表单

最简单的方法通过服务或配置表单是通过形式选项。假设您需要访问原则实体管理器,这样您就可以查询。首先,允许(事实上,需要一个新的entity_manager选项传递给表单:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / AppBundle /形式/ TaskType.php/ /……TaskType扩展AbstractType{/ /……公共函数configureOptions(OptionsResolver美元解析器){/ /……美元解析器- >setRequired (“entity_manager”);}}

既然你已经这样做了,你必须通过一项entity_manager选择当您创建表单:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / AppBundle /控制器/ DefaultController.php使用AppBundle\形式\TaskType;/ /……公共函数newAction(){美元entityManager=美元- >getDoctrine ()- >getManager ();美元任务=……;美元形式=美元- >createForm (TaskType::类,美元任务,(“entity_manager”= >美元entityManager]);/ /……}

最后,entity_manager选择是可访问的选择美元你的论点buildForm ()方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / AppBundle /形式/ TaskType.php/ /……TaskType扩展AbstractType{公共函数buildForm(FormBuilderInterface美元构建器数组,美元选项){/ * *@var\学说\ ORM \ EntityManager EntityManager * /美元美元entityManager=美元选项(“entity_manager”];/ /……}/ /……}

使用这种方法任何东西你的表单。

2)表单定义为一个服务

或者,您可以定义表单类作为服务。这是一个好主意如果你想重用形式在几个地方——注册它作为服务使这更容易。

假设你需要访问EntityManager对象,这样你可以查询。首先,将这作为一个参数添加到表单类:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src / AppBundle /形式/ TaskType.php使用学说\ORM\EntityManagerInterface;/ /……TaskType扩展AbstractType{私人美元entityManager;公共函数__construct(EntityManagerInterface美元entityManager){美元- >entityManager =美元entityManager;}/ /……}

如果您正在使用自动装配可以使用autoconfigure,那么你不需要做任何东西其他:Symob娱乐下载fony会自动知道如何通过正确的EntityManager反对你的__construct ()方法。

如果你是不使用自动装配和autoconfigure作为服务,注册表单手动并标记form.type:

  • YAML
  • XML
  • PHP
1 2 3 4 5
# src / AppBundle /资源/ config / services.yml服务:AppBundle \ \ TaskType形式:参数:(“@doctrine.orm.entity_manager”)标签:(form.type)

3.3

Symfony 3ob娱乐下载.3之前,您需要定义表单类型服务公共。从3.3 Symfony开始ob娱乐下载,您还可以定义它们私人

就是这样!控制器-你在哪里创建表单不需要改变:Symfony是足够聪明来加载ob娱乐下载TaskType从容器中。

如何创建一个自定义表单字段类型为更多的信息。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。