有幾種方法可以做,你想要什麼。
1)您可以在表單中正確填寫。像這樣:
use Symfony\Component\Validator\Constraints as Assert;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$yourEntity = $builder->getData();
//here you start the field, you want to validate
$fieldOptions = [
'label' => 'Field Name',
'required' => true,
];
if ($yourEntity->getYourProperty != 'bla-bla-bla') {
$fieldOptions[] = 'constraints' => [
new Assert\NotBlank([
'message' => 'This is unforgivable! Fill the field with "bla-bla-bla" right now!',
]),
],
}
$builder->add('myField', TextType::class, $fieldOptions);
2)其他方法 - 在你的實體中製作自定義驗證回調函數,並在那裏直接聲明。我想,這是可能的。
3)但是從我的角度來看,最佳方式是使用幾個帶有驗證組的斷言。您需要在生日字段上指定Assert \ isMinor(groups = {「myCustomGroup」})。然後,在你的形式:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'validation_groups' => function (FormInterface $form) {
$yourEntity = $form->getData();
if ($yourEntity->role !== 3) {
return ['Default', 'myCustomGroup'];
}
return ['Default'];
},
希望這將是對你有幫助。
我會盡力告訴你,謝謝。 – NicolaPez
嗨,我試圖實現這一點,我有一個問題:我不明白的是你如何獲得驗證返回爲'myCustomGruop'。我指定這樣的Minor: /** * @Assert \ Date() * @Assert \ GreaterThan(「 - 18 years」) */ public $ birthday; 所以我不知道如何把這個返回數組。 – NicolaPez
我明白這個http://symfony.com/doc/current/components/options_resolver.html和組驗證,現在一切正常。謝謝您的幫助 – NicolaPez