[043] Symfony4 表单入门 Part03

在 表单入门 Part02 部分, 表单是直接在 Controller 里的. 通常这样的代码是不优雅的. 看起来也不是很专业. 我们把表单创建单独的用一个 Class 来实现. 这样会比较美观和方便维护与重用.

使用 symfony/make 包提供的辅助创建表单类指令 make:form 快速的创建一个表单类

$ bin/console make:form 

 The name of the form class (e.g. OrangeChefType):
 > UserType

 The name of Entity or fully qualified model class name that the new form will be bound to (empty for none):
 > User

 created: src/Form/UserType.php
           
  Success! 
           
 Next: Add fields to your form and start using it.

把创建好的表单类: UserType 进行PHP代码完善一下. 看起来像这样:

add('email', EmailType::class, ['empty_data' => ''])
            ->add('passwd', PasswordType::class, ['empty_data' => ''])
            ->add('name', TextType::class, ['empty_data' => ''])
            ->add('save', SubmitType::class)
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}

这样, 在 Controller 中的代码就会非常的简洁了. 修改成这样:

// ... code
    public function signUp(Request $request)
    {
        $user = new User();
        
//        $formBuilder = $this->createFormBuilder($user);
//        $formBuilder->add('name', TextType::class, ['empty_data' => '']);
//        $formBuilder->add('email', EmailType::class, ['empty_data' => '']);
//        $formBuilder->add('passwd', PasswordType::class, ['empty_data' => '']);
//        $formBuilder->add('save', SubmitType::class);
//        $form = $formBuilder->getForm();

        $form = $this->createForm(UserType::class, $user);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
// ... code 

Form 的创建单独转成 Class 后. 和之前的功能实现是一样的效果.

你可能感兴趣的:([043] Symfony4 表单入门 Part03)