我实际上正在渲染一个表单,但这个是动态的,通过动态我想说我生成带有XSD的表单而我不保存实体但是我将数据保存在此内部,同时我生成了一个模板使用smarty和表单中的数据存储,并将为此模板生成的HTML存储在我的数据库中。
此表单用于创建新闻稿,一切都可以用于创建,但现在我必须将此保存为草稿新闻稿(即新闻稿可编辑,并且可以在用户需要时进行编辑...)。
所以我为创作构建了表单生命,但是我将数据传递给了这样的类型:
$builder->add($insideElement[0].'-'.$key, NumberType::class, array('required' => false,'data' => $dataAsArray[$key][$insideElement[0]] , 'attr' => array('class'=> $key.'-'.$insideElement[0]) , 'data' => 0,0));
但是当我使用CollectionType
:
$builder->add($key, CollectionType::class, array(
'entry_type' => DynamicFormType::class,
'entry_options' => array('data' => $arrayOfFieldType),
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'attr' => array(
'class' => 'my-selector',
),));
我通过了DynamicFormType::class
,这是代码:
namespace CoreBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\CountryType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
class DynamicFormType extends AbstractType {
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
if(isset($options['data'][0])){
foreach($options['data'][0] as $key => $field) {
$label = substr($key,0,strpos($key, "-"));
if($field[0] == 'Symfony\Component\Form\Extension\Core\Type\FileType') {
$builder->add($key, $field[0], array('data_class' => null, 'required' => false, 'label' => $label, 'attr' => array('style' => 'width: 75%;')));
}
elseif($field[0] == 'Symfony\Component\Form\Extension\Core\Type\NumberType') {
$builder->add($key, $field[0], array('data' => 0.0, 'label' => $label));
}
else {
$builder->add($key, $field[0], array('data' => '', 'label' => $label));
}
}
} else {
foreach($options['data'] as $key => $field) {
$label = substr($key,0,strpos($key, "-"));
if($field[0] == 'Symfony\Component\Form\Extension\Core\Type\FileType') {
$builder->add($key, $field[0], array('data_class' => null, 'required' => false, 'label' => $label, 'attr' => array('style' => 'width: 75%;')));
}
elseif($field[0] == 'Symfony\Component\Form\Extension\Core\Type\NumberType') {
$builder->add($key, $field[0], array('data' => 0.0, 'label' => $label));
}
else {
$builder->add($key, $field[0], array('data' => '', 'label' => $label));
}
}
}
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'corebundle_dynamic';
}
}
如果有人想在我构建这个数据时向CollectionType
添加数据......或者,在另一个时刻......
随意问我更多代码。
谢谢!