Получить доступ к свойству дочернего объекта из строки - Twig / Symfony

4

Как получить доступ к значению свойства дочернего объекта в twig. Пример:

Это wokring:

{% for entity in array %}
    {{ entity.child.child.prop1 }}
{% endfor %}

Я не хочу передавать s-строку в качестве параметра, чтобы получить одно и то же:

{% for entity in array %}
    {{ attribute(entity, "child.child.prop1") }}
{% endfor %}

Но я получаю ошибку:

Метод "child.child.prop1" для объекта "CustomBundle\Entity\Entity1" не существует...

Есть ли способ сделать это?

  • 0
    Почему ты вообще хочешь это сделать?
  • 5
    Я думаю, что вы хотите github.com/fabpot/Twig/issues/1296 ?
Показать ещё 2 комментария
Теги:
twig

1 ответ

1
Лучший ответ

Вы можете написать пользовательское расширение твига с функцией, которая использует PropertyAccess для symfony для получения значения. Пример реализации расширения может быть следующим:

<?php

use Symfony\Component\PropertyAccess\PropertyAccess;

class PropertyAccessorExtension extends \Twig_Extension
{
    /** @var  PropertyAccess */
    protected $accessor;


    public function __construct()
    {
        $this->accessor = PropertyAccess::createPropertyAccessor();
    }

    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('getAttribute', array($this, 'getAttribute'))
        );
    }

    public function getAttribute($entity, $property) {
        return $this->accessor->getValue($entity, $property);
    }

    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     *
     */
    public function getName()
    {
        return 'property_accessor_extension';
    }
}

После зарегистрировав это расширение как службу, вы можете позвонить

{% for entity in array %}
    {{ getAttribute(entity, "child.child.prop1") }}
{% endfor %}

Счастливое кодирование!

  • 0
    Спасибо, я планировал сделать что-то подобное :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню