我想做一些非常简单的事情(理论上;-)):
我正在使用 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';
}
Run Code Online (Sandbox Code Playgroud)
Symfony 生成如下 HTML:
<input type="checkbox" id="items_17" name="items[17]" value="1">
<input type="checkbox" id="items_16" name="items[16]" value="1">
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试保存提交的数据时,我无法访问元素“items” - Symfony 抛出一个异常,表明子“items”不存在。
// controller action
...
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
$form->get('items')->getData(); // exception: child 'items' does not exist
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
解决方案:
正如 @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
)
)
);
Run Code Online (Sandbox Code Playgroud)
您要添加多个字段,而不仅仅是选项。
您应该修改您的字段的choices或选项。choices_listitems
请参阅选择 field-type的文档。
multiple如果选项设置为,选择字段将呈现复选框true
| 归档时间: |
|
| 查看次数: |
14771 次 |
| 最近记录: |