Symfony:嵌入子表单和createdAt/updatedAt:验证冲突



我有一个嵌入collectionType和子窗体的实体窗体。为了使所需的选项发挥作用,我必须启用自动映射

class ClassePriceType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('priceform', PriceformType::class, [
'data_class' => ClassePrice::class,
'block_prefix' => 'mainprice_block'
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => ClassePrice::class,
'attr' => array(
'class' => 'fullwidth'
)
]);
}
}
class PriceformType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('pricecover', ChoiceType::class, [
'label' => 'Price type',
'placeholder' => 'Select a price option',
'choices' => [ 'Global' => '1' ,'Step' => '2'],
'required' => true
])
->add('rangesubform', RangesubformType::class, [
'data_class' => ClassePrice::class,
'block_prefix' => 'range_block'
])
->add('pricesubform', PricesubformType::class, [
'data_class' => ClassePrice::class,
'block_prefix' => 'price_block'
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'inherit_data' => true
]);
}
}
class RangesubformType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('rangetype', EntityType::class, [
'class' => Ptur::class,
'label' => 'Step type',
'choice_translation_domain'=> true,
'required' => true
])
->add('rangeformat', EntityType::class, [
'class' => Format::class,
'label' => 'Format',
'required' => true
])
->add('rangemin', IntegerType::class, [
'label' => 'Range min',
'required' => true
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'inherit_data' => true,
'attr' => array(
'class' => 'form-horizontal'
)
]);
}
}
framework:
validation:
email_validation_mode: html5
# Enables validator auto-mapping support.
# For instance, basic validation constraints will be inferred from Doctrine's metadata.
auto_mapping:
AppEntity: []
enabled: 
true   

在我的实体中,我还使用自动生成的createdAt/updatedAt

use GedmoTimestampableTraitsTimestampableEntity;
use GedmoSoftDeleteableTraitsSoftDeleteableEntity;
use GedmoMappingAnnotation as Gedmo;

问题是,使用auto_mapping激活,我在创建新的实体输入时遇到了一个验证器错误:createdAt和updatedAt不能为null。。。

你知道怎么解决吗?

确保您的对象在类内有效:

public function __construct()
{
$this->createdAt = new DateTime();
$this->updatedAt = new DateTime();
}

在实体中这样设置时间:

/**
* @var datetime $created_at
*
* @OrmColumn(type="datetime")
*/
protected $created_at;
/**
* @var datetime $updated_at
*
* @OrmColumn(type="datetime", nullable = true)
*/
protected $updated_at;
/**
* @ormPrePersist
*/
public function onPrePersist()
{
$this->created_at = new DateTime("now");
}
/**
* @OrmPreUpdate
*/
public function onPreUpdate()
{
$this->updated_at = new DateTime("now");
}

最新更新