Как показать имя типа в Twig - PullRequest
0 голосов
/ 13 мая 2019

У меня есть 2 таблицы: Продукт и Тип .Отношение - один Тип имеет множество Продукт

Type:    id, name
Product: id, name, type_id

Я не знаю, как отобразить имя типа в Twig, я новичок в Symfony и вот мой код:

<div>
    {% for pro in product %}
        <div>Product name: {{ pro.name }}</div>
        <div>
            Type name:
        </div>
        <div>Price: {{ pro.price }}</div>
        <div>
            {% for img in pro.images %}
                <img src="{{ "/uploads/product/" ~ img.path }}" style="height: 100px;">
            {% endfor %}
        </div>
    {% endfor %}
</div>

Ответы [ 2 ]

3 голосов
/ 13 мая 2019

Вы можете получить доступ к свойствам объекта в Twig.Вы должны смотреть не на свою базу данных, а на то, как создаются ваши сущности.Ваш продукт имеет $id, $name и $type. Тип имеет $id и $name.

  • В Twig вы можете сделать {{product.name}}
  • Чтобы получить тип, вы хотите {{product.type}}
  • Чтобы получить имя типа, вы хотите {{product.type.name}}

Итак, в вашем коде это будет:

<div>
    Type name: {{ pro.type.name }} 
</div>

Внутреннепарсер Twig получит $product и проверит, имеет ли он метод getName(), когда вы делаете {{product.name}}.Та же самая логика применима к {{product.type.name}}.Он проверяет, имеет ли $product значение getType(), а затем значение getName().Эквивалент PHP равен $product->getType()->getName().

Вы почти никогда не должны вводить реальный метод в свой код.Если вам нужно, вы можете сделать шаг назад и переоценить, потому что это часто кодовый запах .

2 голосов
/ 13 мая 2019

Вы можете просто добавить {{pro.type.name}} к своему коду:

<div>
    {% for pro in product %}
        <div>Product name: {{ pro.name }}</div>
        <div>
            Type name: {{ pro.type.name }}
        </div>
        <div>Price: {{ pro.price }}</div>
        <div>
            {% for img in pro.images %}
                <img src="{{ "/uploads/product/" ~ img.path }}" style="height: 100px;">
            {% endfor %}
        </div>
    {% endfor %}
</div>

И убедитесь, что атрибут type ссылается на сущность Type. Ваша сущность продукта должна иметь атрибут type, как показано ниже:

/**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Type", inversedBy="products")
     * @ORM\JoinColumn(nullable=false)
     */
    private $type;

 // getter

public function getType()
    {
        return $this->type;
    }

И у вашего объекта Type должен быть атрибут products, как показано ниже:

/**
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Type", mappedBy="type")
     * @ORM\JoinColumn(nullable=true)
     */
    private $products;

public function getProducts()
    {
        return $this->products;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...