如何在Symfony 2中的对象类型函数中呈现细枝模板

如何在Symfony 2中的对象类型函数中呈现细枝模板,symfony,twig,Symfony,Twig,我使用的是条令模式,有一个对象引用我的parrent类。 例: 现在,我想细枝选择好的模板来呈现我的儿子对象的功能,他们的类型。因此,猫可以有一个超级猫div,我的狗也可以有他们的酷模板。 我试着这样做: {%for pet in owner.pets%} <div class="pet"> {{ pet }} </div> {%endfor%} {owner.pets%} {{pet}} {%endfor%} 我得到了一个很好的答案:

我使用的是条令模式,有一个对象引用我的parrent类。 例:

现在,我想细枝选择好的模板来呈现我的儿子对象的功能,他们的类型。因此,猫可以有一个超级猫div,我的狗也可以有他们的酷模板。 我试着这样做:

{%for pet in owner.pets%}
    <div class="pet">
        {{ pet }}
    </div>
{%endfor%}
{owner.pets%}
{{pet}}
{%endfor%}
我得到了一个很好的答案:

致命错误:类“对象的正确类型”的对象无法在中转换为字符串

那么我可能就快找到答案了?
我是一个新手,所以任何帮助都是有价值的。

你应该在类Pet中添加一个抽象方法。即:

class Pet
{
    abstract function render();
}
而不是在子类中实现此方法。例如:

class Dog extends Pet
{
    public function render()
    {
        return sprintf('<div class="dog">%s</div>', 'blabla');
    }
}

或者,您可以始终创建一个
getTemplate()
共享方法,并将其包含在细枝中:
{%include pet.template%}
刚刚获得另一种方法>不要尝试检查类型,检查属性:

{% if pet.ownedBones is defined %}
woot that's a dog
{% else %}
it's somthing else
{% endif %}

是的,这是一个解决方案,谢谢,但是,如果我想保持干净,这种方法不应该在类中,对吗?您可以始终创建一个
getTemplate()
共享方法,并将其包含在细枝中:
{%include pet.template%}
这样更好!不过这个主意很聪明:D谢谢编辑:现在就试试吧,我把它和一个get_类混在了一起,我把它放到了父类中,得到了我想要的!再次感谢@StefanoSala,你能把你的评论纳入答案吗?通过这种方式更容易找到重要信息。您是否尝试向类中添加
\uu toString()
函数?我希望小树枝会自动使用它。尝试一些简单的方法,比如
return$this->name。但是,如果我不把{%raw%}{%endraw%}(可能会导致不好的东西)放进去,我会在我的页面中得到“blabla”,我也不想要它。
{{ pet.render() }}
{% if pet.ownedBones is defined %}
woot that's a dog
{% else %}
it's somthing else
{% endif %}