【问题标题】:Twig : Get value of the entity attached to the form in twig view SymfonyTwig : 在 twig 视图 Symfony 中获取附加到表单的实体的值
【发布时间】:2016-06-02 13:52:09
【问题描述】:

我想在 TWIG 视图中访问我附加到表单的实体的值。

表单是这样创建的:

$form = $this->createForm(new SuperForm(), $entity);

在树枝视图中,如果我显示 {{ dump(form.vars.value) }} 我有这个:

Zone {#1000 ▼
#name: "First book zone"
 -book: Book {#538 ▶}
 -location: "inside"
 -priority: 5
 -live: true
 -BooksGroups: PersistentCollection {#1003 ▶}
 -hasGroups: true
 #slug: "sdds"
 #id: 2
 #createdAt: DateTime {#999 ▶}
 #updatedAt: null
 #owner: null
 #updateUser: null
}

编辑:

但是,当我尝试通过这种方法访问该值时,我不能:

{{ form.vars.value.name }}

Impossible to access an attribute ("name") on a null   variable

奇怪的是,当我使用 de default 方法时,我没有问题,并且显示了真实值:

{{ form.vars.value.name|default('Default name') }}

Displayed: 'First book zone'

这可能是字符串和整数的解决方法,但我该如何处理集合和数组?

【问题讨论】:

  • 是的,名称在区域内。我试过了,我得到了同样的结果:Impossible to access an attribute ("Zone") on a null variable with this dump(form.vars.value.Zone)
  • 还是一样的结果。我已经读到它可能来自属性是私有的事实,但我仍然如何访问它们?
  • 私有|受保护不是问题,因为您永远不会将您的属性设置为公开(或在某些特殊情况下)。例如:class Zone { private $name; getName(){ return $this->name; } } 另外,我尝试将其公开,但没有任何改变。
  • 您已经有权访问控制器中的实体,对吧?如果是,只需将它沿数组中的树枝视图传递,您就可以访问所有变量。
  • 它在一个集合中的自定义表单类型中,它也在一个集合中,所以它并不那么容易。但我终于使用了 form.value.name|default('qwe') 解决方法......但是如果有人知道为什么正常的方法不起作用但这个方法起作用,我会很高兴听到!

标签: php forms symfony twig


【解决方案1】:

之所以需要这个技巧,是因为您可能在集合类型中设置了allow_add 选项。所以这就是为什么第一个 null 来自集合的prototype,因为原型中没有设置任何值。 Prototype 是一个特殊的字段,它不直接在 Twig 中呈现。这就是为什么您必须在集合中为prototype 设置默认值或将allow_add 设置为false

【讨论】:

  • 您应该在答案中添加form.value.name|default('') 以使其完整,在这种情况下我们需要将allow_add 设置为true
猜你喜欢
  • 2015-02-06
  • 2014-05-08
  • 2011-10-31
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多