1

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

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

1 回答 1

2

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

请参阅此食谱部分,该部分告诉您如何将类型转换为服务,以便您可以注入依赖项,同时注入您的价值。

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

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

希望这对您有所帮助。

问候,
马特

于 2012-04-23T02:36:42.200 回答