首页 文章

Symfony在树枝中显示对象值

提问于
浏览
1

我有一个与另一个调用 Items 相关的实体 Playlist .

我想部署每个项目的树枝模板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 回答

  • 0

    解决方案1

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

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

    不好的是代码片段

    {{ entity.items.id }}
    

    您必须在打印之前循环所有项目 id out(从您的错误,非常清楚)

    {% 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 (从控制器传递)而不是实体"binded"访问表单

相关问题