在没有实体的情况下将数据传递到Symfony表单集合

问题描述

我正在尝试获取“替换”的集合以使其正常工作,但似乎无法将数据传递到表单中。在流程中没有与之相关的实体,只是我从外部流程传入的数据。提交后,我将必须验证并应用系统中的更改。

我的控制器的片段

    /**
     * @Route("/reassignment",name="digitalMarket_category_reassignment")
     * @param ArrayCollection $deletedSubcategories Subcategories being deleted from other request
     * @param Request $request
     * @param NotificationGenerator $ng
     * @return Response
     */
    public function subcategoryReassignment( $deletedSubcategories,Request $request,NotificationGenerator $ng)
    {

        $form = $this->createForm(SubcategoryReplacementType::class,['replacements'=>[
            ['name'=>'offer','handle'=>'handle']
        ]]);

        $form->handleRequest($request);
        if( $form->isSubmitted() && $form->isValid() ){

            dd($form->getData());

        }

        return $this->render('marketplace/category/replacement.html.twig',[
            'form' => $form->createView()
        ]);
    }

SubcategoryReplacementType.php

<?php

namespace App\Form\DigitalMarket;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;


class SubcategoryReplacementType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder,array $options)
    {
        $builder
            ->add('replacements',CollectionType::class,[
                'entry_type' => SubcategoryDeleteType::class,'mapped' => false,]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
//        $resolver->setDefaults();
    }
}

SubcategoryDe​​leteType.php

<?php

namespace App\Form\DigitalMarket;


use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class SubcategoryDeleteType extends AbstractType
{

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder,array $options)
    {
        $builder
            ->add('name',TextType::class,[
                'label' => 'Name','required'=>true,])
            ->add('handle',[
                'label' =>'Handle',])
            ->add('oldSub',[
                'label' =>'Old Subcategory',])
            ->add('newSub',EntityType::class,[
                'class'=>Subcategory::class,'label'=>'New Subcategory','group_by'=>'category','multiple'=>false,'attr'=>[
                    'class'=>'js-select2'
                ],'help'=>'Subcategories that will replace one being removed.',])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {

    }
}

解决方法

所以在这种情况下,我做错的是在表单上使用“映射”。

映射类型:布尔默认值:true

如果您希望在读取或写入该字段时忽略该字段 对象,可以将映射选项设置为false。

您可以只传递一个值数组:

 $form = $this->createForm(SubcategoryReplacementType::class,['replacements'=>$replacements]);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...