Php 将选项数组中的值传递给嵌入表单
我知道如何通过Php 将选项数组中的值传递给嵌入表单,php,symfony,Php,Symfony,我知道如何通过createForm方法将变量从控制器传递到表单,但是如果我需要将该值传递到嵌入在表单中的表单(我被称为createForm),该怎么办?我从未在嵌入表单的任何地方显式调用createForm,那么我应该如何将该值赋给它呢?值得注意的是,我试图传递的值可以通过服务获得,但我不能调用$this->get('serviceName')->getValue(),因为我不在控制器中。作为参考,这是我获取父窗体值的方式,请注意我是如何通过createForm方法而不是构造函数来实现的: //
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
,后者将读取这些选项,并将值
选项传递给嵌入的类型。这就像传递样式设计,将所有选项传递给主类型,主类型会将其中一些传递给每个子类型,而每个子类型会将它们传递给自己的子类型,依此类推。同样,您可以看看这个[cookbook recipe],了解如何读取选项并在自定义表单类型中使用它们
总之,我认为将您的类型转换为服务更容易
希望这对你有帮助
问候,马特