Silex:在 Formbuilder 中使用复选框作为数组
Silex: use Checkboxes as array in Formbuilder
创建普通表单时,您可以有多个复选框,就像一个数组一样。示例:
<form action="/action_page.php" method="get">
<input type="checkbox" name="vehicle" value="Bike"> I have a bike<br>
<input type="checkbox" name="vehicle" value="Car" checked="checked"> I have a car<br>
<input type="submit" value="Submit">
</form>
这使您能够说:
Give me al the checked checkboxes with name of vehicle
这可能只是自行车或汽车,但也可能两者都是 selected。您可以遍历它们并对数据做一些事情。
但是,当我尝试这样做时,Silex FormServiceProvider 不允许我这样做。
在我的例子中,我使用了这些代码行:
foreach($user->data() as $player){
$builder->add('player', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
]);
}
为游戏中的每个玩家创建了一个复选框。我可以 select 是否要将他们添加到团队中。
所以在提交表单后,我希望能够做这样的事情:
$data = $form->getData();
foreach($data['player'] as $checked){
//Add to the team
}
任何人都可以向我解释如何在 Silex 中执行此操作吗?
我找到了我的解决方案。我一直在使用错误的输入类型。当我使用选择类型时。它工作正常:
$players = [];
foreach($user->data() as $player){
$array = array($player->username => $player->username);
array_push($players, $array);
}
$builder->add('player', ChoiceType::class, [
'constraints' => array(new Assert\NotBlank()),
'choices' => $players,
'choice_attr' => function($val, $key, $index) {
return ['class' => 'input-field'];
},
'multiple' => true,
'expanded' => true
]);
创建普通表单时,您可以有多个复选框,就像一个数组一样。示例:
<form action="/action_page.php" method="get">
<input type="checkbox" name="vehicle" value="Bike"> I have a bike<br>
<input type="checkbox" name="vehicle" value="Car" checked="checked"> I have a car<br>
<input type="submit" value="Submit">
</form>
这使您能够说:
Give me al the checked checkboxes with name of vehicle
这可能只是自行车或汽车,但也可能两者都是 selected。您可以遍历它们并对数据做一些事情。
但是,当我尝试这样做时,Silex FormServiceProvider 不允许我这样做。
在我的例子中,我使用了这些代码行:
foreach($user->data() as $player){
$builder->add('player', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
]);
}
为游戏中的每个玩家创建了一个复选框。我可以 select 是否要将他们添加到团队中。
所以在提交表单后,我希望能够做这样的事情:
$data = $form->getData();
foreach($data['player'] as $checked){
//Add to the team
}
任何人都可以向我解释如何在 Silex 中执行此操作吗?
我找到了我的解决方案。我一直在使用错误的输入类型。当我使用选择类型时。它工作正常:
$players = [];
foreach($user->data() as $player){
$array = array($player->username => $player->username);
array_push($players, $array);
}
$builder->add('player', ChoiceType::class, [
'constraints' => array(new Assert\NotBlank()),
'choices' => $players,
'choice_attr' => function($val, $key, $index) {
return ['class' => 'input-field'];
},
'multiple' => true,
'expanded' => true
]);