4
我想要做的很簡單的東西(理論上;-)):添加的選項複選框列表陣列Symfony的2種形式
- 從數據庫中選擇一個選項列表
- 顯示每個複選框選項
- 做的東西,我使用的Symfony 2.2.2每個選定的選項
。
這是我如何動態地添加列表中的表單對象:
// MyformType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$formFactory = $builder->getFormFactory();
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (\Symfony\Component\Form\FormEvent $event) use ($formFactory) {
$options = $event->getData();
$items = $options["items"];
foreach ($items as $item) {
$event->getForm()->add(
$formFactory->createNamed($item->getId(), "checkbox", false, array(
'label' => $item->getName()
)
)
);
}
}
);
}
public function getName()
{
return 'items';
}
Symfony的生成HTML,看起來像:
<input type="checkbox" id="items_17" name="items[17]" value="1">
<input type="checkbox" id="items_16" name="items[16]" value="1">
現在,當我嘗試保存提交的數據,我可以無法訪問元素「項目」 - Symfony會拋出子項'不存在的異常。
// controller action
...
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
$form->get('items')->getData(); // exception: child 'items' does not exist
}
}
我在做什麼錯了?
解決方案:
正如描述的複選框@nifr列表動態添加這樣的:
$items = array(1 => "foo", 2 => "bar");
$event->getForm()->add(
$formFactory->createNamed("selecteditems", "choice", null, array(
"multiple" => true,
"expanded" => true,
"label" => "List of items:",
"choices" => $items
)
)
);
說明(爲任何人在解決其他興趣)會使複選框:你必須同時設置多個,並擴大到真正拿到複選框 – herrjeh42