symfony表单字段的必填(*)标志将忽略验证组

问题描述 投票:0回答:1

我正在使用具有不同组标签的实体@Assert批注。

  /**
   * @var string
   * @Assert\NotBlank(groups={"basic"})
   * @ORM\Column(name="name", type="string", length=255, nullable=true)
   */
  private $name = null;

  /**
   * @var string
   * @Assert\NotBlank(groups={"advanced"})
   * @ORM\Column(name="full_name", type="string", length=255, nullable=true)
   */
  private $fullName = null;

因此它定义了basicadvanced组。创建表单时,我使用basic验证组,希望advanced约束不会受到影响。

$formBasics = $this->createForm(ArtistBasicType::class, $dummyArtist, [
'validation_groups' => ['basic'],
...

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

我没有设置ArtistBasicType的默认validation_group(注释过,但之前也很累),并且buildForm字段正在使用typeguesser:

->add('fullName', null, ['label' => 'Full name'])
->add('name', null, ['label' => 'Name'])

所以我也没有在那里强制任何required (*)标志。Twig也包含以下标准代码:

{{ form_row(formBasics.name,{'attr': {'class': 'form-control'}}) }}
{{ form_row(formBasics.fullName,{'attr': {'class': 'form-control'}}) }}

但是,两个字段都是必填

在这种情况下,如何获得全名字段是可选的,但是如果我使用高级组进行验证,则准备成为必填项?

symfony validation assert formbuilder
1个回答
0
投票

required选项默认为true,因此您应添加"required": false

请记住,这只是一个html5验证标志,不会对您的模型实施任何后端验证。


required属性是true by default,这就是为什么我说您不认识Symfony,您没有阅读手册的原因。因此,如果true实际上是required,则它[[will结果(取决于您的表单主题)将显示一个星号。

返回主题:如果您希望有条件地正确显示星号,则必须使用JavaScript!例如:可能有条件地要求一个字段(例如,使用验证组…),因此,在渲染时,视图无法知道该字段是否必需。这是在后端的验证过程中发生的。
© www.soinside.com 2019 - 2024. All rights reserved.