エンティティ ( 'data_class' => ...
) にマップされたフォームがあります。エンティティのプロパティに (注釈を介して) バリデーターを設定しました。
エンティティには、nameTranslations
ドクトリンのタイプ のプロパティ ( ) がありますarray
。フォームのこのフィールドに割り当てられる複数のフィールドで構成されるカスタム フィールド タイプを作成しました。サブフォームの各フィールド (タイプ) には、オプションを介しtext
てバリデーターのセットアップ ( ) があります。NotBlank
validation_constraint
nameTranslations
など、プロパティでさまざまな検証注釈を試しましたValid()
。ほとんど何でも error_bubbling を設定してみました。サブフォーム (フィールドnameTranslations
) はまったく検証されません。
サブフォーム:
class TranslatableTextType extends AbstractType
{
private $langs;
/**
* {@inheritDoc}
*/
public function __construct($multilang)
{
$this->langs = $multilang->getLangs();
}
/**
* {@inheritDoc}
*/
public function buildForm(FormBuilder $builder, array $options)
{
foreach($this->langs as $locale => $lang)
{
$builder->add($locale, 'text', array(
'label' => sprintf("%s [%s]", $options['label'], $lang),
'error_bubbling' => true,
));
}
}
/**
* {@inheritDoc}
*/
public function getDefaultOptions(array $options)
{
$constraints = [
'fields' => [],
'allowExtraFields' => true,
'allowMissingFields' => true,
];
foreach($this->langs as $locale => $lang)
{
$constraints['fields'][$locale] = new NotBlank();
}
$collectionConstraint = new Collection($constraints);
return [
'validation_constraint' => $collectionConstraint,
'label' => '',
'error_bubbling' => true
];
}
/**
* {@inheritDoc}
*/
public function getParent(array $options)
{
return 'form';
}
/**
* {@inheritDoc}
*/
public function getName()
{
return 'translatable_text';
}
}
メインフォーム:
$builder->add('nameTranslations', 'translatable_text', [
'label' => 'Name'
]);
エンティティ内:
/**
* @var array
*
* @Assert\Valid
* @ORM\Column(type="array")
*/
protected $nameTranslations;