Symfony 3.4表单:将变量从一种类型传递到另一种类型

时间:2018-06-08 09:25:28

标签: symfony-forms symfony-3.4

我有两种类型。一个是ProductType。第二个是ProductFeaturesType ProductFeaturesType是ProductType中的CollectionType 我想将我的变量产品从ProductType传递给ProductFeaturesType。

  

EDITED

我的目标是根据产品的一个属性在我的ProductFeaturesType中执行一个条件。

我尝试了以下内容:

ProductType

$builder
            ->add('productFeatures', CollectionType::class, array(
                'entry_type' => ProductFeaturesType::class,
                'allow_add' => true,
                'allow_delete' => true,
                'product' => $product
            ))
        ;

它不起作用。我收到以下错误消息:

  

选项“product”不存在。定义的选项包括:“action”,“allow_add”,“allow_delete”,“allow_extra_fields”,“attr”,“auto_initialize”,“block_name”,“by_reference”,“compound”,“constraints”,“csrf_field_name”,“csrf_message “,”csrf_protection“,”csrf_token_id“,”csrf_token_manager“,”data“,”data_class“,”delete_empty“,”禁用“,”文档“,”empty_data“,”entry_options“,”entry_type“,”error_bubbling“, “error_mapping”,“extra_fields_message”,“inherit_data”,“invalid_message”,“invalid_message_parameters”,“label”,“label_attr”,“label_format”,“mapped”,“method”,“post_max_size_message”,“property_path”,“prototype” “,”prototype_data“,”prototype_name“,”required“,”translation_domain“,”trim“,”upload_max_size_message“,”validation_groups“。

你能告诉我什么是错的吗?

1 个答案:

答案 0 :(得分:0)

Exception告诉您代码中的错误,选项产品不是表单构建器声明中的已定义选项。如果您的目的是使用您已经完成的产品功能来保存/更新产品,因为您有映射信息; MTO或MTM;在您的实体中并在表单构建器中定义collectionType。当您提交表单时,symfony将在每个功能实体中设置“传递”产品实体。 只需删除产品选项,然后尝试提交表单。

希望它有所帮助!

  

EDITED

您只需在类型

中添加form event listener即可
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
            $event->getData(); // here you have all the data to be set which match with the data_class option of your type
            $event->getForm(); //here you have the form and you can manipulate it as you wish.
});