Я получил форму с 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
`, второй столбец и т. д.
Будет ли у кого-нибудь решение, чтобы правильно его отрендерить?
@DarkBee переменная, переданная из контроллера, - это элемент, элементы не существуют и будут созданы циклом for
Если вы возвращаете один товар, то почему у вас есть цикл? Просто получите доступ, например, item.id
Также floors
представляет собой массив, поэтому вам также понадобится цикл для этого, например. {% for number, persons in item.floors %}Room #{{ number }}'s max persons: {{ persons }}
Когда я визуализирую страницу, я получаю один элемент, в данном случае экспертный, этот элемент будет возвращать статические значения от объекта, и эти 5 массивов должны заполнять таблицу, каждый ключ для каждой строки. Я думал, что, возможно, мне следует создать массив, содержащий другие массивы, такие как data => [floor => '..', ambient => '' ... ", name => '...' и т. д.] - Или что-то вроде [0] => ['floor' => '1', ambient => '18', name => 'test' и т. д.], '1' => ['floor' => '1' , ambient => '5', name => 'test2' и т. д.]. Как я могу сделать это в контроллере? в то время, когда я получаю массив с помощью find ($ id)
Вы не можете перебирать свойства объекта в twig
. Сначала вам нужно преобразовать его в реальный массив
Как мне это сделать?
Для одного объекта 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 %}
Начать с
{% for item in items %}