如何在Symfony 2中呈现对象类型功能的树枝模板

时间:2012-01-16 13:30:25

标签: symfony twig

我正在使用一个学说'class table inheritance'模式,并且有一个对象引用我的parrent类。 例如:

class Pet {
    protected $id;

    protected $age;
}

class Dog extends Pet {
    protected $ownedBones;
}

class Cat extends Pet {
    protected $killedBirds;
}

class Owner {
    private $pets;
}

现在我想要twig选择好的模板来渲染我的儿子对象的类型。所以猫可以有一个超级小猫,我的狗也可以有他们很酷的模板。 我试着这样做:

{%for pet in owner.pets%}
    <div class="pet">
        {{ pet }}
    </div>
{%endfor%}

我很高兴:

  

致命错误:类'对象类型'的对象无法在...中转换为字符串

所以我可能接近答案? 我是一个Twig新手,所以任何帮助都会受到重视。

2 个答案:

答案 0 :(得分:2)

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

class Pet
{
    abstract function render();
}

在您的子类中,您应该实现此方法。例如:

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

在模板中,只需调用render方法:

{{ pet.render() }}

否则,您始终可以创建getTemplate()共享方法,并将其包含在树枝中:{% include pet.template %}

答案 1 :(得分:0)

换一种方式&gt;不要试图检查类型,检查属性:

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