将选项数组中的值传递给嵌入表单


Pass value in options array to embedded form

我了解如何通过createForm方法将变量从控制器传递到表单,但是如果我需要将该值传递给嵌入在我称为createForm的表单中的表单怎么办?我从来没有在嵌入式表单的任何地方显式调用 createForm,那么我应该如何获得该值呢?值得注意的是,我尝试传递的值可以通过服务获得,但我无法调用$this->get('serviceName')->getValue()因为我不在控制器中。作为参考,这是我获取父窗体值的方式,请注意我是如何通过 createForm 方法而不是构造器来做到这一点的:

//in a controller
$form = $this->createForm(new FormType(), $formObject, array('value' => $value));

并不是因为您不在控制器中,所以无法注入服务(和参数)。特别是对于每种类型都可以是服务的类型。当然,您不能直接执行$this->get('serviceName')->getValue(),因为默认情况下get方法不可用。但是,您可以将服务注入到表单类型中。请参阅我在此处回答的有关依赖项注入的另一个问题,以获取有关如何注入服务的一些信息。

请参阅此说明书部分,其中告诉您如何将类型转换为服务,以便可以注入依赖项,同时注入值。

如果由于某种原因无法将类型转换为服务,则需要做的是将选项传递给将读取它们的FormType并将value选项传递给嵌入类型。这就像一个传递样式设计,你把所有的选项传递给主类型,主类型会把其中一些传递给每个子类型,而不是每个子类型会把它们传递给自己的子类型,依此类推。同样,您可以查看此[食谱食谱],了解如何阅读选项并在自定义表单类型中使用它们。

总之,我认为将您的类型转换为服务更容易。

希望这对你有帮助。

问候
马 特