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;
