2015-09-19 5 views
0

Моя система имеет две связанные таблицы материал и items_budget. Вторая таблица имеет форму, в которой перечислены названия каждого материала в качестве checkbox, а затем еще 2 input, один за его количество, а другой за его цену. Вот код:Проблемы с листинговыми объектами как флажок на Symfony2

{% for material in materials %} 
    <div class="checkbox"> 
     <label> 
      <input class="itemsbudget_material" type="checkbox" name="cdg_itemsbudget_type[material][]" value="{{ material.id }}"> {{ material.name }} - 
     </label> 
     <input class="itemsbudget_quantity" type="text" name="cdg_itemsbudget_type[quantity][]" placeholder="Qtd" size="5"/>x - R$ 
     <input class="itemsbudget_price_hidden" type="hidden" value="{{ material.price }}"/> 
     <input class="itemsbudget_price" type="text" name="cdg_itemsbudget_type[price][]" value="0" size="5" readonly/> 
    </div> 
{% endfor %} 

Существует триггер, который срабатывает, когда новые данные вставляются в items_budget, функция которого является вычесть из текущего количества выбранного материала количества, указанное в форме.

Проблема заключается в том, что функция триггера работает только с первым регистром в материалах, а остальное поле количества всегда возвращает NULL. В соответствии с приведенным выше кодом, я попытался продолжить, установив скобки в конце атрибута name, но таким образом страница формы обновляется только, а данные не вставляются в items_budget. Есть ли другой способ перечислить объекты в Symfony2? Спасибо!

+0

Где ваш внутренний код? – user2268997

+0

Используйте компонент formbuilder symfony с типом сущности: http://symfony.com/doc/current/reference/forms/types/entity.html и установите расширенный и множественный атрибут в true – Nickolaus

ответ

0

Чтобы сделать это с помощью компонента Symfony Form, вам необходимо использовать Form Collection. Посмотрите на ссылку!

Таким образом, ваш тип items_budget будет содержать набор форм типа материала.

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('materials', 'collection', array(
      'type' => new MaterialType() 
     )) 
    ; 
} 

MaterialType содержит все поля формы, которые отображаются в каждой строке.

Когда форма отправлена, вы получаете объект ItemsBudget со всей совокупностью Существенных сущностей, и вы можете делать с ними все, что захотите. Вы можете иметь логическое свойство, которое отображается как флажок, а затем просто проверять его значение и делать что-то на его основе.

+0

Я не мог понять документацию, они отсутствует объяснение. Следуя этому типу 'collection', мне удалось перечислить всю форму, но это не то, что мне нужно. Мне нужно перечислить только «имя» каждого ** материала ** и добавить еще два «ввода» для ввода «количества» и «цены» каждого из них в соответствии с кодом, который я написал. Кроме того, если на моем пути первые регистры прекрасно работают, почему он не может работать с другими? – mfgabriel92

+0

Идея состоит в том, что 'quantity' и' price' являются полями materialType. Если вы также добавите их в материальную сущность в качестве свойств (нет необходимости делать их постоянными), symfony обрабатывает все элементы формы для вас, и вы можете получить доступ ко всем значениям, например '$ budget-> getMaterials() [0] -> getQuantity(); '. – LorenzSchaef

+0

Таблица ** items_budget ** предназначена для регистрации выбранного материала, его количества и цены. На самом деле ** материал ** имеет только цену. – mfgabriel92