Symfony 2 / Twig 和一组复选框
Symfony 2 / Twig and a collection of checkboxes
在我的应用程序中,我需要显示一组复选框,用户可以使用这些复选框来指示某些选择。在我的例子中,它指的是 "zones",即 A 区、B 区、C 区等
我 运行 遇到的问题是如何使用框架提供的 FormBuilderInterface
在我的表单类型 class 中构造它。
文档引用了 "collection" 类型 [1],这似乎是我需要的,但我在连接复选框元素 [2] 时遇到了问题。该文档似乎只给出了单个复选框的示例,但我需要它用于一个组。
这是我目前所拥有的(为简洁起见,我省略了其他字段):
class FormType extends AbstractType {
public function buildForm( FormBuilderInterface $builder, array $options )
{
$builder
->add('zones', 'collection',
array(
'type' => 'checkbox',
'options' => array(
'zone-a' => 'Zone A',
'zone-b' => 'Zone B',
'zone-c' => 'Zone C',
)
)
)
;
}
}
和数据 class(如果您愿意,可以形成模型):
class FormData {
protected $zones = [];
public function __construct( array $zones = NULL )
{
if( ! empty( $zones ) )
{
$this->setZones( $zones );
}
}
public function getZones()
{
return $this->zones;
}
public function setZones( $zones )
{
$this->zones = $zones;
}
}
这是我呈现表单元素的方式(目前):
{{ form_row(form.zones) }}
但是,上面只输出了一个名为 Zones 的标签,没有别的。
如何在 Symfony 2/Twig 应用程序中正确呈现 group/collection 个复选框?
[1] http://symfony.com/doc/current/reference/forms/types/collection.html
[2] http://symfony.com/doc/current/reference/forms/types/checkbox.html
您将需要第二个 FormType。
您调用的第一个表单应该如下所示:
$builder
->add('zones', 'collection',
array(
'type' => new FormDataType(),
'options' => array(
.....
)
)
)
然后第二个表格应该是这样的:
class FormDataType extends AbstractType {
...
$builder
->add('checkBox1', 'checkbox', ...)
->add('checkBox2', 'checkbox', ...)
....
}
我刚刚写了这个,所以我不知道它是否有效,...但这是你必须采用的方法,我已经在我的一个项目中做过类似的事情
在我的应用程序中,我需要显示一组复选框,用户可以使用这些复选框来指示某些选择。在我的例子中,它指的是 "zones",即 A 区、B 区、C 区等
我 运行 遇到的问题是如何使用框架提供的 FormBuilderInterface
在我的表单类型 class 中构造它。
文档引用了 "collection" 类型 [1],这似乎是我需要的,但我在连接复选框元素 [2] 时遇到了问题。该文档似乎只给出了单个复选框的示例,但我需要它用于一个组。
这是我目前所拥有的(为简洁起见,我省略了其他字段):
class FormType extends AbstractType {
public function buildForm( FormBuilderInterface $builder, array $options )
{
$builder
->add('zones', 'collection',
array(
'type' => 'checkbox',
'options' => array(
'zone-a' => 'Zone A',
'zone-b' => 'Zone B',
'zone-c' => 'Zone C',
)
)
)
;
}
}
和数据 class(如果您愿意,可以形成模型):
class FormData {
protected $zones = [];
public function __construct( array $zones = NULL )
{
if( ! empty( $zones ) )
{
$this->setZones( $zones );
}
}
public function getZones()
{
return $this->zones;
}
public function setZones( $zones )
{
$this->zones = $zones;
}
}
这是我呈现表单元素的方式(目前):
{{ form_row(form.zones) }}
但是,上面只输出了一个名为 Zones 的标签,没有别的。
如何在 Symfony 2/Twig 应用程序中正确呈现 group/collection 个复选框?
[1] http://symfony.com/doc/current/reference/forms/types/collection.html [2] http://symfony.com/doc/current/reference/forms/types/checkbox.html
您将需要第二个 FormType。
您调用的第一个表单应该如下所示:
$builder
->add('zones', 'collection',
array(
'type' => new FormDataType(),
'options' => array(
.....
)
)
)
然后第二个表格应该是这样的:
class FormDataType extends AbstractType {
...
$builder
->add('checkBox1', 'checkbox', ...)
->add('checkBox2', 'checkbox', ...)
....
}
我刚刚写了这个,所以我不知道它是否有效,...但这是你必须采用的方法,我已经在我的一个项目中做过类似的事情