我理解如何通过createForm
方法将变量从控制器传递给表单,但是如果我需要将该值传递给嵌入在表单中的表单我将被称为 createForm 上?我从来没有在嵌入式表单上的任何地方显式调用createForm,所以我应该如何获得它的价值呢?值得注意的是,我试图传递的价值可通过服务获得,但我无法调用$this->get('serviceName')->getValue()
,因为我不在控制器中。作为参考,这是我如何获取父表单的值,请注意我是如何通过 createForm 方法而不是构造函数来实现的:
//in a controller
$form = $this->createForm(new FormType(), $formObject, array('value' => $value));
答案 0 :(得分:2)
这不是因为您不在控制器中而无法注入服务(和参数)。特别是对于每种类型都可以作为服务的类型。当然,您无法直接执行$this->get('serviceName')->getValue()
,因为默认情况下方法get
不可用。但是,您可以将服务注入表单类型。请参阅我在依赖注入here上回答的另一个问题,了解有关如何注入服务的一些信息。
请参阅此cookbook section,它告诉您如何将您的类型转换为服务,以便您可以注入依赖项,同时注入您的值。
如果由于某种原因您无法将您的类型转换为服务,那么您需要做的是将选项传递给FormType
,它将读取它们并将value
选项传递给嵌入式。它就像一个传递样式设计,你将所有选项传递给主类型,它将其中一些传递给每个子类型,而不是每个子类型将它们传递给它们自己的子类型,依此类推。同样,您可以查看此[食谱手册],了解如何阅读选项并在自定义表单类型中使用它们。
总之,我认为将您的类型转换为服务更容易。
希望这会对你有所帮助。
的问候,
马特