1

私はまだ、カテゴリのネストされたツリー フォームの出力と送信に関する小さな課題に取り組んでいます

そして、私は最初にレンダリング部分を見つけようとしています(JSと移入の前に)。

私は一般的な形をしています:

カテゴリフォーム

class CategoryForm extends AbstractType
{
    private $em;

    public function __construct($em) {
       $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options) {
      $transformer = new CategoryToChoiceTransformer($this->em);

      $builder->add(
               $builder->create('categories', 'collection',
                   array(
                      'type' => new CategoryCollectionType($this->em)
                   )
               )->addModelTransformer($transformer));



        $builder->add('save', 'submit');
    }

    public function getDefaultOptions(array $options)
    {
        $resolver->setDefaults(array(
                'data_class' => 'Acme\DemoBundle\Entity\Item',
        ));

    }

    public function getName()
    {
        return 'category';
    }
}

私は CategoryToChoiceTransformer を持っています:

CategoryToChoiceTransformer

class CategoryToChoiceTransformer implements DataTransformerInterface
{
    /**
     * @var ObjectManager
     */
    private $om;

    /**
     * @param ObjectManager $om
     */
    public function __construct(ObjectManager $om)
    {
        $this->om = $om;
    }

    public function transform($categories)
    {
        $categoriesExpanded = new ArrayCollection();

        if (!empty($categories)) {
            $categoryRepository = $this->om->getRepository('AcmeDemoBundle:Category');

            foreach ($categories as $category) {
                $path = new ArrayCollection($categoryRepository->getPath($category));
                $categoriesExpanded->add($path);
            }
        }

        return $categoriesExpanded;
    }

    public function reverseTransform($categoryList)
    {
        ...
    }
}

そして、カスタムタイプ(親フォームで使用)があります:

カテゴリ コレクション タイプ

class CategoryCollectionType extends AbstractType
{
    private $em;

    public function __construct($em) {
        $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options) {

        $builder->add('name', 'entity', array(
                'class' => 'AcmeDemoBundle:Category',
                'query_builder' => function(EntityRepository $er) {
                        return $er->createQueryBuilder('c')
                        ->orderBy('c.id', 'ASC');
                 },
                'property' => 'name',
                'empty_value' => _('Choose Category')
        ));


    }

    public function getName()
    {
        return 'category_collection_type';
    }
}

しかし、私が得たものは次のとおりです。 ここに画像の説明を入力

しかし、最初のグループに 3 つの選択ボックスが表示され、2 番目のグループに 3 つの選択ボックスが表示されることが予想されます (データ トランスフォーマーは以下からデータを変換します)。

array(
    [0] = >ObjectCategory#...,
    [1] => ObjectCategory#...
)

array(
    [0] => array( ObjectCategory#..., ObjectCategory#..., ObjectCategory#..., ),
    [1] => array( ObjectCategory#..., ObjectCategory#..., ObjectCategory#..., )
)

私の間違いはどこですか?

CategoryCollectionType でコレクション型を作成する必要があると考えました。

カテゴリ コレクション タイプ

...
$builder->add('categories', 'collection', array(
    'type' => 'entity',
    'allow_add' => true,
    'allow_delete' => true,
    'prototype' => false,
    'show_legend' => true,
    'widget_add_btn' => array('label' => _('Add category')),
    'options' => array(
                    'widget_control_group' => false,
                    'label_render' => false,
                    'show_legend' => false,
                    'class' => 'AcmeDemoBundle:Category',
                    'query_builder' => function(EntityRepository $er) {
                        return $er->createQueryBuilder('c')
                            ->orderBy('c.id', 'ASC');
                    },
                    'property' => 'name',
                    'empty_value' => _('Choose Category'),
                ),
    )
);

しかし、それは役に立ちません...何かアイデアはありますか?

PS> 回答する場合は、このスレッドをフォローしてください :)

4

0 に答える 0