У меня есть Grid
модель в отношениях один ко многим с GridElement
с. GridElement
имеет следующую структуру:
<?php
class GridElement
{
/** @var Grid */
private $grid;
/** @var Column */
private $column;
/** @var int */
private $row;
/** @var string */
private $value;
}
$column
- это отношение многие-к-одному с моделью Column
. Здесь нужно знать, что когда я хочу создать или обновить Grid
, его столбцы фиксированы: можно только добавлять или удалять строки.
Теперь я хочу использовать Symfony Компонент формы, чтобы возможность редактировать мою сетку, а точнее ее элементы.
Моя проблема связана с рендерингом HTML. Мне нужно HTML вроде:
<table>
<tr>
<th></th>
<th>Column A</th>
<th>Column B</th>
</tr>
<tr>
<td>Line 1</td>
<td>
<input type="hidden" name="elements[0][columnId]" value="1">
<input type="hidden" name="elements[0][row]" value="1">
<input type="text" name="elements[0][value]" value="A1">
</td>
<td>
<input type="hidden" name="elements[1][columnId]" value="2">
<input type="hidden" name="elements[1][row]" value="1">
<input type="text" name="elements[1][value]" value="B1">
</td>
</tr>
<tr>
<td>Line 2</td>
<td>
<input type="hidden" name="elements[2][columnId]" value="1">
<input type="hidden" name="elements[2][row]" value="2">
<input type="text" name="elements[2][value]" value="A2">
</td>
<td>
<input type="hidden" name="elements[3][columnId]" value="2">
<input type="hidden" name="elements[3][row]" value="2">
<input type="text" name="elements[3][value]" value="B2">
</td>
</tr>
</table>
Нет проблем сгенерировать что-то подобное и заставить все это работать, если моя сетка пуста для начала. Просто какой-то код JavaScript для генерации новых строк и удаления других, здесь нет ничего сложного.
Часть, которую я не могу понять, это как генерировать что-то подобное, когда моя форма содержит элементы в первую очередь? Я могу создать шаблон для определения того, каким должен быть рендеринг GridElement
(ie. <td>
часть с 3 входами в ней), однако я не понимаю, как мне организовать свои GridElement
s в строках.
Должен ли я просто oop просмотреть свои элементы и сгенерировать форму без каких-либо функций рендеринга формы? Таким образом, я смогу реализовать свою собственную логику c, чтобы знать, где начинать <tr>
и когда ее заканчивать. Сообщения об ошибках не будут проблемой, потому что в случае ошибки в ячейке сообщение будет находиться по пути elements , а не по указанному c element one.
Or Есть ли причудливый способ, которым я не вижу?