Symfony 3.4: рендеринг нескольких массивов в ветке

Я получил форму с CollectionType, которая хранит массив в базе данных SQLite, это структура объекта сущности, возвращаемого в контроллере:

Expertations {#666 ▼
-id: 9
  -date: DateTime @1536749818 {#653 ▶}
  -client: 1
  -status: 0
  -price: 0.0
  -expiration: DateTime @1536749818 {#650 ▶}
  -tipo: 1
  -kw: 12
  -piani_casa: 2
  -riscaldamento: "1"
  -opere_murarie: false
  -trifase: false
  -sconto: 10.0
  -level: 1
  -square_meters: 140
  -floor: array:6 [▼
    0 => 1
    1 => 1
    2 => 2
    3 => 2
    4 => 2
    5 => 2
  ]
  -ambient: array:6 [▼
    0 => Rooms {#671 ▼
      -id: 10
      -name: "Cucina"
      -level: 1
      -sq_meter_from: 0.0
      -sq_meter_to: 999.0
      -punti_prese: 5
      -punti_luce: 1
      -prese_tv: 1
    }
    1 => Rooms {#649 ▶}
    2 => Rooms {#670 ▶}
    3 => Rooms {#669 ▶}
    4 => Rooms {#649 ▶}
    5 => Rooms {#668 ▶}
  ]
  -name: array:6 [▼
    0 => "Cucina"
    1 => "Soggiorno"
    2 => "Corridoio"
    3 => "Camera Padronale"
    4 => "Camera Figlia"
    5 => "Bagno"
  ]
  -pp: array:6 [▼
    0 => 5
    1 => 4
    2 => 2
    3 => 4
    4 => 4
    5 => 2
  ]
  -pl: array:6 [▼
    0 => 1
    1 => 1
    2 => 2
    3 => 1
    4 => 1
    5 => 2
  ]
  -pt: array:6 [▼
    0 => 1
    1 => 1
    2 => 0
    3 => 1
    4 => 1
    5 => 0
  ]
  -num_circuiti: 5
  -num_prese_telefono_dati: 3
  -illum_sicurezza: 2
  -spd: 1
  -imp_ausiliari: 1
}

Это должно быть отображено в шаблоне ветки в виде таблицы, большая часть данных извлекается с использованием простого доступа к массиву, такого как {{ item.string }}. Поля с именем floor, ambient, name, pp, pl, pt должны отображаться в столбце, одна строка для элемента (вы должны увидеть, что в этом примере все элементы содержат 5 ключей).

Я пытался получить доступ к массиву как обычно, но у меня возникла ошибка, связанная с попыткой доступа к ключу, который на самом деле является целым числом (не следует?)

вот веточка для цикла, которая не работает:

{% for items in item %}
<tr>
    <td>{{ items.floor }}</td>
    <td>{{ items.ambient }}</td>
    <td>{{ items.name }}</td>
    <td>{{ items.pp }}</td>
    <td>{{ items.pl }}</td>
    <td>{{ items.pt }}</td>
</tr>
{% endfor %}

Возвращенная ошибка: Impossible to access an attribute ("floor") on a integer variable ("1").

Ожидаемое поведение:

Эти элементы должны быть отображены в таблице, например: первая строка, показать значение floor.0, значение ambient.0.name, name.0, значение pp.0, значение pl.0, значение pt.0`, второй столбец и т. д.

Будет ли у кого-нибудь решение, чтобы правильно его отрендерить?

Начать с {% for item in items %}

DarkBee 13.09.2018 10:48

@DarkBee переменная, переданная из контроллера, - это элемент, элементы не существуют и будут созданы циклом for

andreaem 13.09.2018 11:46

Если вы возвращаете один товар, то почему у вас есть цикл? Просто получите доступ, например, item.id

DarkBee 13.09.2018 12:09

Также floors представляет собой массив, поэтому вам также понадобится цикл для этого, например. {% for number, persons in item.floors %}Room #{{ number }}'s max persons: {{ persons }}

DarkBee 13.09.2018 12:19

Когда я визуализирую страницу, я получаю один элемент, в данном случае экспертный, этот элемент будет возвращать статические значения от объекта, и эти 5 массивов должны заполнять таблицу, каждый ключ для каждой строки. Я думал, что, возможно, мне следует создать массив, содержащий другие массивы, такие как data => [floor => '..', ambient => '' ... ", name => '...' и т. д.] - Или что-то вроде [0] => ['floor' => '1', ambient => '18', name => 'test' и т. д.], '1' => ['floor' => '1' , ambient => '5', name => 'test2' и т. д.]. Как я могу сделать это в контроллере? в то время, когда я получаю массив с помощью find ($ id)

andreaem 13.09.2018 12:47

Вы не можете перебирать свойства объекта в twig. Сначала вам нужно преобразовать его в реальный массив

DarkBee 13.09.2018 13:27

Как мне это сделать?

andreaem 13.09.2018 15:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
843
1

Ответы 1

Для одного объекта Expertations (с именем yourObject) цикл должен выглядеть следующим образом:

{% for key in yourObject.floor|keys %}
    <tr>
        <td>{{ yourObject.floor[key] }}</td>
        <td>{{ yourObject.ambient[key] }}</td>
        <td>{{ yourObject.name[key] }}</td>
        <td>{{ yourObject.pp[key] }}</td>
        <td>{{ yourObject.pl[key] }}</td>
        <td>{{ yourObject.pt[key] }}</td>
    </tr>
{% endfor %}

Другие вопросы по теме