我正在使用一个学说'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新手,所以任何帮助都会受到重视。
答案 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 %}