Symfony CollectionType在没有实体的情况下构建时添加数据

时间:2017-07-07 09:49:57

标签: php symfony

我实际上正在渲染一个表单,但这个是动态的,通过动态我想说我生成带有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添加数据......或者,在另一个时刻...... 随意问我更多代码。 谢谢!

0 个答案:

没有答案
相关问题