Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将选项数组中的值传递给嵌入表单_Php_Symfony - Fatal编程技术网

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],了解如何读取选项并在自定义表单类型中使用它们

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

希望这对你有帮助

问候,
马特