【问题标题】:Pass value in options array to embedded form将选项数组中的值传递给嵌入式表单
【发布时间】:2012-04-23 10:36:42
【问题描述】:

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

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

【问题讨论】:

    标签: php symfony


    【解决方案1】:

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

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

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

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

    希望对你有所帮助。

    问候,
    马特

    【讨论】:

      猜你喜欢
      • 2011-09-20
      • 2019-05-31
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多