0

多対多の関係を形成するエンティティをフォームに入力することに関して質問があります。

最初に私のコード:

製品エンティティ:

<?php
namespace My\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Zend\Form\Annotation;
use My\Entity\Brand;

/**
 * @ORM\Entity(repositoryClass="My\EntityRepository\Product")
 * @ORM\Table(name="product")
 * @Annotation\Hydrator("Zend\Stdlib\Hydrator\ArraySerializable")
 * @Annotation\Name("Product")
 */
class Product{

    /**
     * @ORM\id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     * @Annotation\Attributes({"type":"hidden"})
     */
    protected $id;

    /**
     * @ORM\ManyToMany(targetEntity="productGroup")
     * @Annotation\Type("Zend\Form\Element\Select")
     * @Annotation\Options({"label":"Productgroup: "})
     */
    protected $productGroups;


    /**
     * @ORM\Column(nullable=false)
     * @Annotation\Attributes({"type":"text"})
     * @Annotation\Options({"label":"Product name:"})
     */
    protected $productName;

    /**
     * @Annotation\Attributes({"type":"textarea"})
     * @Annotation\Options({"label":"Product description: "})
     * @ORM\Column
     */
    protected $description;

    public function __construct() {
        $this->memos = new ArrayCollection();
        $this->productGroups = new ArrayCollection();
    }

    /**
     * Sets the product tags
     * @param ArrayCollection $tags
     */
    public function setTags(\Doctrine\Common\Collections\ArrayCollection $tags) {
        $this->productGroups = $tags;
    }


    /**
     * This function unsets a product group
     */
    public function unsetProductsGroups() {
        unset($this->productGroups);
    }
}

それから私は私の行動を持っています

 public function newAction()
    {
        $em = $this->getEntityManager();

        $request = $this->getRequest();
        $product = new Product();
        $builder = new AnnotationBuilder($em);
        $form = $builder->createForm($product);


        if ($request->isPost() && $this->request->getPost()) {
            $repo = $this->getEntityManager()->getRepository('My\Entity\Product');
            $repo->addProduct($this->getRequest()->getPost());
            $this->flashMessenger()->addMessage('The product was added.');
            return $this->redirect()->toRoute('zfcadmin');
        } else {
            $config = $this->getModuleConfig();
            if (isset($config['my_form_extra'])) {
                foreach ($config['my_form_extra'] as $field) {
                    $form->add($field);
                }
            }

            $form->setHydrator(new DoctrineHydrator($em, 'My\Entity\Product'));
            $form->bind($product);
            return new ViewModel(array('form' => $form));
        }
    }

そして私の見解

<div class="well">
    <?php
        $form = $this->form;
        $form->setAttribute('method','post');
        echo $this->form()->openTag($form);
        echo $this->formSelect($form->get('productGroups'));
        echo $this->form()->closeTag($form);
    ?>
</div>

この空の選択ボックスの出力。セットアップは同じですが、ドロップダウンが空で、関連するアイテムが確実にある私の編集フォームでも。

注: この質問に関連する情報のみを表示しました。

関連アイテムを表示する際に、この問題を解決する方法を知りたいです。できればアノテーションのみを使用してください。

ありがとう。

4

1 に答える 1

1

表示されている $product インスタンスは 1 つだけです。これは、空のメモと productGroup 配列コレクションを持つ新しい Product です。フォームにはこの管理対象外の製品インスタンスがバインドされています。ビューは管理対象外の製品インスタンスがバインドされたフォームを取得しているため、選択項目は表示されません。

于 2013-11-10T11:43:37.743 に答える