对于特定项目,我们使用symfony而不使用任何ORM。我们使用REST API来获取和存储数据。 我们的类确实类似于教义实体,但是它是一种定制服务,可以使用API获取和存储数据。
对于一个非常复杂的页面,我们有一些可重复的嵌入形式。除删除过程外,一切正常。
当我们在embed集合中删除一个项目(通过使用JavaScript删除DOM中的字段)并提交时,表单数据仍然包含已删除项目的行,但是所有属性均为null。就像我们已经忘记在CollectionType字段上使用“ allow_delete”属性一样。
您能给我们一些帮助吗?
主要对象类:
class Survey extends WSObject
{
protected $id;
protected $title;
protected $surveyQuestions;
//Getter and setters are ok
}
“子”对象类:
class SurveyQuestion extends WSObject
{
protected $id;
protected $title;
protected $surveyId;
//Getter and setters are ok
}
表单结构:
// $survey is a well constructed survey with data
$form = $this->createFormBuilder($survey)
->add('title', TextType::class,array(
'label' => 'Title FR *',
'required' => true
))
->add('surveyQuestions', CollectionType::class, array(
'entry_type' => SurveyQuestionType::class,
'allow_add' => true,
'allow_delete' => true,
'delete_empty'=>true,
'label' => false,
'entry_options' => array(
'surveyId'=>$survey->getId(),
'empty_data' => null
)
))
->getForm();
SurveyQuestionType:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
class SurveyQuestionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('id', HiddenType::class,array(
'required' => false
));
$builder->add('title', TextType::class,array(
'required' => true
));
$builder->add('surveyId', HiddenType::class,array(
'data' => $options['surveyId'],
'required' => false
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => SurveyQuestion::class,
'surveyId' => null
));
}
}
想象一下已有两个问题的现有调查。如果我们删除表单中的一个问题(通过从JavaScript中的DOM中删除字段)并提交。 $ form-> getData();返回:
Survey {
id : 42,
title : 'the meaning of life',
surveyQuestions : array(2) [
0 : surveyQuestion {
id : 1,
title : 'My first question',
surveyId : 42
},
// This is the corresponding deleted row
1 : surveyQuestion {
id : null,
title : null,
surveyId : null
},
]
}
我们期望的是:
Survey {
id : 42,
title : 'the meaning of life',
surveyQuestions : array(1) [
0 : surveyQuestion {
id : 1,
title : 'My first question',
surveyId : 42
}
]
}
如果您需要更多详细信息,请告诉我。提前致谢。 最好的问候。