在Symfony 4中,可以通过使用表单类型的选项来解决包含额外字段的问题。以下是一个示例代码:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username', TextType::class)
->add('password', TextType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'App\Entity\User',
'allow_extra_fields' => false, // 禁止接受额外字段
]);
}
}
在上面的代码中,allow_extra_fields
选项设置为false
,以禁止表单接受额外的字段。这样一来,如果表单提交包含额外的字段,Symfony将抛出异常。
要使用上述表单类型,可以在控制器中创建一个表单实例并处理表单的提交。以下是一个基本的示例:
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use App\Form\UserType;
use App\Entity\User;
class UserController extends AbstractController
{
public function create(Request $request)
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// 处理表单的提交
// ...
return $this->redirectToRoute('user_success');
}
return $this->render('user/create.html.twig', [
'form' => $form->createView(),
]);
}
}
在上面的代码中,createForm()
方法使用UserType
类创建一个表单实例,并使用handleRequest()
方法处理表单的提交。如果表单是通过POST方法提交的并且是有效的,可以在提交处理代码中执行适当的操作。
这样,如果表单包含额外的字段,则Symfony将抛出异常,并且不会执行提交处理代码。
上一篇:表单不显示我输入的任何内容
下一篇:表单操作按钮无法提交