Как визуализировать шаблон ветки в функции типа объекта в Symfony 2 - PullRequest
0 голосов
/ 16 января 2012

Я использую шаблон доктрины *1001* 'наследование таблиц классов', и у меня есть объект, ссылающийся на мой класс parrent.Пример:

class Pet {
    protected $id;

    protected $age;
}

class Dog extends Pet {
    protected $ownedBones;
}

class Cat extends Pet {
    protected $killedBirds;
}

class Owner {
    private $pets;
}

Теперь я бы хотел, чтобы веточка выбрала хороший шаблон для рендеринга объекта моего сына в зависимости от их типа.Таким образом, у кошек может быть супер catly div, и у моих собак также может быть свой классный шаблон.Я пытался сделать что-то вроде этого:

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

Я получил хороший:

Неустранимая ошибка: объект класса «правильный тип объекта» не может быть преобразован в строкув ...

Так что я могу быть рядом с ответом?Я новичок из Twig, поэтому любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 16 января 2012

Вы должны добавить абстрактный метод в классе Pet.IE:

class Pet
{
    abstract function render();
}

Чем в ваших дочерних классах вы должны реализовать этот метод.Например:

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

В вашем шаблоне просто вызовите метод рендеринга:

{{ pet.render() }}

Или же вы всегда можете создать getTemplate() совместно используемый метод, включив его в веточку: {% include pet.template %}

0 голосов
/ 01 марта 2012

Просто есть другой способ> не пытайтесь проверить тип, проверьте свойства:

{% if pet.ownedBones is defined %}
woot that's a dog
{% else %}
it's somthing else
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...