2012-04-22 29 views
1

我知道如何通过createForm方法将变量从控制器传递给表单,但如果需要将该值传递给嵌入表单中的表单,我将其称为createForm?我从来没有在嵌入式表单的任何地方显式调用createForm,那么我该如何为它获得它的价值呢?值得注意的是,我试图通过的价值可以通过服务获得,但我不能拨打$this->get('serviceName')->getValue(),因为我不在控制器中。作为参考,这是我得到的值父窗体,请注意我是如何做到这一点通过的CreateForm方法,而不是构造器:将选项数组中的值传递给嵌入表单

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

回答

2

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

看到这个cookbook section它告诉你如何将你的类型转换成一个服务,这样你就可以注入你的依赖关系,并同时注入你的价值。

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

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

希望这可以帮助你。

Regards,
Matt