Symfony形式的通用字段继承/组成

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

[我有2个共享公共字段的实体AB,由于我不想使用trait,因此我使用Doctrine inheritance for entities common fields来基于(MappedSuperClass)设置那些公共字段。] >

[为实体B建立一条宁静的发布路线,我实例化了一个FormBType,其中data_class映射到B::class,并扩展了FormCType(包含公共字段,'data_class'则不映射任何内容)”。

[我试图在https://symfony.com/doc/current/form/inherit_data_option.html中使用Inherited_data方法,但我不希望表单中有多余的键/嵌套层(我希望将其展平)。

我的问题是,没有考虑使用Assert对特征中的公共字段进行验证,而是使用空字符串通过validation进行表单传递。

class B {
use CTrait;
}


//trait that has the common fields with ORM mapping and Assert
trait CTrait {
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\Column(type="string")
* @ORM\Assert\Length(min="2")
*/
private $name;
}


//Common fields formType
class CType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
    }
}

//Form using the common fields formType
class BType extends CType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
    }

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

我有2个共享公共字段的实体A和B,我基于(实体公共字段的Doctrine继承)使用一个特征来设置这些公共字段,因为我不想使用...

php forms symfony inheritance composition
1个回答
1
投票
[在进一步检查Length之后,我意识到空字符串被认为是有效值,即使我有name: "",它仍然通过Assert\Length(min=2)进行验证,在添加NotBlank之后,验证有效。
© www.soinside.com 2019 - 2024. All rights reserved.