指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

symfony的form_option关于validation_groups配置的使用:

场景:
①一个entity和一个entityFormType关联,创建form,这个时候可能用不到validation_groups,默认的validation_groups值为 Default

②一个entity和多个entityFormType关联
比如某个entity的字段比较多,可能需要多个表单才能创建数据,比如,分了第一步操作,第二步操作,然后提交,那么这个entity才算信息完全。
这个时候就需要多个entityFormType,对entity的数据进行验证,entityFormType-A 可能验证了 userName userEmail, entityFormType-B 可能验证了 avatar like favor信息

那么就可以在entity下配置:
@MainAssert\Event(groups={"Default", "basic_information", "basic_information_phys", "state_change", "event_builder"})
@MainAssert\EventAwards(groups={"awards"})

这里 entityFormType-A可能配置了 validation_groups:
$resolver->setDefaults([
            'validation_groups' => ['basic_information'], //只会执行在这个组的validator
         ]);

这里 entityFormType-B可能配置了 validation_groups:
$resolver->setDefaults([
            'validation_groups' => ['awards'], //只会执行在这个组的validator
         ]);

最后控制器下:
$form = $this->createForm(Form\EventAFormType::class, $event); // entityFormType-A         
$form = $this->createForm(Form\EventBFormType::class, $event); // entityFormType-B

③关于form验证的位置可以有三个地方可以配置
1>在formType下的constraints里配置
$builder
            ->add('email', TextType::class, [
                'constraints' => [
                    new NotBlank([ //NotBlank 为框架内置
                        'message' => 'Please enter a email',
                    ]),
                    new EmailFormat([ //EmailFormat 为自定义
                        'message' => 'Please enter a normal email',
                    ]),
                    new EmailUnique([ //EmailUnique 为自定义
                        'message' => 'Current email already exists!',
                    ])
                ],
            ])

2>在entity的最外层,全局定义
/**
 * @ORM\Entity(repositoryClass="App\Repository\EventRepository")
 * @ORM\Table(name="conferences", indexes={@ORM\Index(name="name_system", columns={"name_system"}),
 *     @ORM\Index(name="workflow_id", columns={"workflow_id"}),
 *     @ORM\Index(name="state", columns={"state"})
 * })
 * @ORM\HasLifecycleCallbacks
 *
 * @MainAssert\Event(groups={"Default", "basic_information", "basic_information_phys", "state_change", "event_builder"})
 * @MainAssert\EventBasicInformation(groups={"basic_information", "public_page_edit_basic_information", "connected_webinar_edit_basic_information", "connected_webinar_basic_information"})
 * @MainAssert\EventKeywords(groups={"basic_information", "public_page_edit_basic_information", "connected_webinar_basic_information"})
 * @MainAssert\EventRegistrationSettingsBasic(groups={"registration_basic"})
 * @MainAssert\EventRegistrationSettingsFull(groups={"registration_full"})
 * @MainAssert\EventRegistrationSettingsDates(groups={"registration_basic", "registration_full", "public_page_edit_basic_information"})
 * @MainAssert\EventSubmissionSettings(groups={"submission_settings"})
 * @MainAssert\EventSubmissionSettingsDates(groups={"submission_settings", "public_page_edit_basic_information"})
 * @MainAssert\EventAwards(groups={"awards"})
 * @MainAssert\EventPrograms(groups={"programs"})
 * @Annotation\FileUploads(subFolder="/")
 * @Annotation\MultiFileUploads
 */

3>在entity的指定字段上定义
   /**
     * @var string|null
     *
     * @ORM\Column(name="sponsors_description", type="text", nullable=true)
     * @AcmeAssert\TinymceField(groups={"sponsor_tinymce"}) // use App\Validator\Constraints as AcmeAssert;
     */
    protected $sponsorsDescription;


    /**
     * @var string|null
     *
     * @ORM\Column(type="string", nullable=true)
     * @Assert\NotBlank(groups={"basic_information", "public_page_edit_basic_information", "connected_webinar_basic_information", "connected_webinar_edit_basic_information"}) // use Symfony\Component\Validator\Constraints as Assert;
     * @Assert\EnableAutoMapping
     */
    protected $name_full;