在树枝中显示对象值的符号


Symfony displaying object value in twig

我有一个实体Playlist,它与另一个调用Items有关。

我想在每个项目的一个小树枝模板id上进行部署。

class Playlist
{
    private $items;
    public function __construct()
    {
        $this->items = new 'Doctrine'Common'Collections'ArrayCollection();
    }
    public function addItem('Publicartel'AppBundle'Entity'PlaylistContent $content)
    {
        $content->setPlaylist($this);
        $this->duration += $content->getDuration();
        $this->items->add($content);
        return $this;
    }
    public function removeItem('Publicartel'AppBundle'Entity'PlaylistContent $content)
    {
        $this->items->removeElement($content);
        $this->duration -= $content->getDuration();
    }
    public function getItems()
    {
        return $this->items;
    }
}

我想在Playlist表单中部署项目的id。

我试过了:

{% for content in edit_form.items %}
{{ content.getId() }}
{{ content.id() }}
{% endfor %}

但我得到以下错误:

对象"Symfony''Component''Form''FormView"的方法"getId"不存在对象"Symfony''Component''Form''FormView"的方法"id"不存在

我已将id属性添加到我的FormType:中

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('id')
        ->add('position')
        ->add('duration')
        ->add('playlist')
        ->add('content')
    ;
}

但我得到以下错误:

在呈现模板期间引发异常("可捕获的致命错误:类的对象Symfony''Component''Form''FormView无法转换为字符串")

我也试过:

//控制器

$entity = $em->getRepository('PublicartelAppBundle:Playlist')->find($id);
return $this->render('PublicartelAppBundle:Playlist:edit.html.twig', array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        ));

//Twig

{{ entity.items.id }}

但这也带来了一个错误:

对象"Doctrine''ORM''PersistentCollection"的方法"id"不存在

谢谢!

解决方案1

你的解决方案的最后一部分是好的

$entity = $em->getRepository('PublicartelAppBundle:Playlist')->find($id);
return $this->render('PublicartelAppBundle:Playlist:edit.html.twig', array(
            'entity'      => $entity,
            [...]
        ));

不好的是的代码片段

{{ entity.items.id }}

在打印id之前,你必须循环所有项目(从你的错误来看,很清楚)

{% for item in entity.items %}
  {{ item.id }}
{% endfor %}

解决方案2(未测试)

当然,您也可以从窗体的底层对象访问数据,而无需从控制器传递数据。因此,您可以更改中的代码片段

来自

{% for content in edit_form.items %}
  {{ content.getId() }}
  {{ content.id() }}
{% endfor %}

{% for content in edit_form.vars.data %}
  {{ content.id() }}
{% endfor %}

您的错误是试图访问FormView(从控制器传递),而不是实体"绑定"到表单