问题描述: 在使用Symfony的Form组件时,扩展了ChoiceType字段类型,但是在提交表单后发现扩展后的ChoiceType字段的值没有正确提交。
解决方法:
假设我们想要扩展ChoiceType字段类型,并创建一个新的字段类型MyChoiceType。
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class MyChoiceType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'choices' => [
'Option 1' => 'option1',
'Option 2' => 'option2',
],
]);
}
public function getParent()
{
return ChoiceType::class;
}
}
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class MyFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('my_field', MyChoiceType::class);
}
}
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class MyController extends AbstractController
{
public function myAction(Request $request)
{
$form = $this->createForm(MyFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
// 处理数据提交
}
return $this->render('my_template.html.twig', [
'form' => $form->createView(),
]);
}
}
确保在模板文件中正确渲染表单。
{{ form_start(form) }}
{{ form_row(form.my_field) }}
{{ form_end(form) }}
这样,扩展的ChoiceType字段类型应该可以正确地提交表单数据了。如果仍然存在问题,可以检查其他可能的错误,如表单验证等。
下一篇:不明白为什么类别不会折叠。