我有一个没有实体的表单,它的构造类似于Symfony的文档:
$form = $this->createFormBuilder(['message' => 'Standard message'])
->add('....', EntityType::class, [
'class' => '....',
'choice_label' => 'name',
])
->add('.....', DateType::class, [
'widget' => 'single_text',
'html5' => false,
'attr' => ['class' => 'js-datepicker'],
])
->add('....', DateType::class, [
'widget' => 'single_text',
'html5' => false,
'attr' => ['class' => 'js-datepicker'],
])
->add('Submit', SubmitType::class)
->getForm();
但是,是否有可能使用Form Type类并在控制器中检索数据?我的控制器现在变得非常大,因为那里有很多表单代码。当我尝试将代码转换为单独的表单类型类时,似乎处理了表单但是当我尝试在我的控制器中调用$ form-> getData()时它是空的。我使用以下代码:
$form = $this->createForm(MyFormType::class);
$form->handleRequest($request);
if($request->isMethod('POST')){
print_r($form->getData()); // Empty?
die();
}
我的表单类如下:
namespace AppBundle\Form;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class MyFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('....', DateType::class, [
'widget' => 'single_text',
'html5' => false,
'attr' => ['class' => 'js-datepicker'],
])
->add('....', DateType::class, [
'widget' => 'single_text',
'html5' => false,
'attr' => ['class' => 'js-datepicker'],
])
->add('....', EntityType::class, [
'class' => '....',
'choice_label' => 'name',
])
->add('Submit', SubmitType::class);
}
}
另一种方法是将代码放入单独的服务中,但我认为使用表单类型更简洁。