Silex:如何在 Form 中创建循环
Silex: How to create a loop in Form
以下代码行为我提供了 Silex 表格。一个文本字段和一个复选框。文本字段包含团队的名称。复选框应包含用户的用户名,以便我可以将他们添加到团队中。
$form = $app['form.factory']->createBuilder(FormType::class)
->add('name', TextType::class, array(
'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 4,'max' => 64))),
'label' => 'Team Name',
'required' => 'required',
'attr' => array('class' => 'input-field', 'autocomplete' => 'off', 'value' => $team->data()->name),
'label_attr' => array('class' => 'label')
))
->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
])
->add('submit', SubmitType::class, [
'label' => 'Edit',
'attr' => array('class' => 'submit'),
])
->getForm();
我可以使用以下行获取我的用户列表:
$user = new User()
$user->getList();
foreach($user->data() as $player){
->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
])
}
但是,我不知道如何将这两个部分结合起来,因为 $form 变量是在 'line' 中用一个 ';' 定义的在末尾。我怎样才能将这个 $form 分成几个部分,以便我可以遍历我的用户并为每个用户添加一个复选框?
执行 ->getForm();
后表单为 "generated" 因此如果您想在生成之前添加任何字段,您应该完成 ->getForm();
因此您的代码可能如下所示:
// add you "static" fields
$formBuilder = $app['form.factory']->createBuilder(FormType::class)
->add('name', TextType::class, array(
'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 4,'max' => 64))),
'label' => 'Team Name',
'required' => 'required',
'attr' => array('class' => 'input-field', 'autocomplete' => 'off', 'value' => $team->data()->name),
'label_attr' => array('class' => 'label')
))
->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
])
->add('submit', SubmitType::class, [
'label' => 'Edit',
'attr' => array('class' => 'submit'),
]);
$user = new User();
$user->getList();
// then add your "dynamic" fields
foreach($user->data() as $player) {
$formBuilder->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
]);
}
// then generate your form
$form = $formBuilder->getForm();
以下代码行为我提供了 Silex 表格。一个文本字段和一个复选框。文本字段包含团队的名称。复选框应包含用户的用户名,以便我可以将他们添加到团队中。
$form = $app['form.factory']->createBuilder(FormType::class)
->add('name', TextType::class, array(
'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 4,'max' => 64))),
'label' => 'Team Name',
'required' => 'required',
'attr' => array('class' => 'input-field', 'autocomplete' => 'off', 'value' => $team->data()->name),
'label_attr' => array('class' => 'label')
))
->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
])
->add('submit', SubmitType::class, [
'label' => 'Edit',
'attr' => array('class' => 'submit'),
])
->getForm();
我可以使用以下行获取我的用户列表:
$user = new User()
$user->getList();
foreach($user->data() as $player){
->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
])
}
但是,我不知道如何将这两个部分结合起来,因为 $form 变量是在 'line' 中用一个 ';' 定义的在末尾。我怎样才能将这个 $form 分成几个部分,以便我可以遍历我的用户并为每个用户添加一个复选框?
执行 ->getForm();
后表单为 "generated" 因此如果您想在生成之前添加任何字段,您应该完成 ->getForm();
因此您的代码可能如下所示:
// add you "static" fields
$formBuilder = $app['form.factory']->createBuilder(FormType::class)
->add('name', TextType::class, array(
'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('min' => 4,'max' => 64))),
'label' => 'Team Name',
'required' => 'required',
'attr' => array('class' => 'input-field', 'autocomplete' => 'off', 'value' => $team->data()->name),
'label_attr' => array('class' => 'label')
))
->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
])
->add('submit', SubmitType::class, [
'label' => 'Edit',
'attr' => array('class' => 'submit'),
]);
$user = new User();
$user->getList();
// then add your "dynamic" fields
foreach($user->data() as $player) {
$formBuilder->add('players', CheckboxType::class, [
'constraints' => array(new Assert\NotBlank()),
'label' => $player->username,
'attr' => array('class' => 'input-field', 'value' => $player->username),
'label_attr' => array('class' => 'label')
]);
}
// then generate your form
$form = $formBuilder->getForm();