多対多の関係を形成するエンティティをフォームに入力することに関して質問があります。
最初に私のコード:
製品エンティティ:
<?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>
この空の選択ボックスの出力。セットアップは同じですが、ドロップダウンが空で、関連するアイテムが確実にある私の編集フォームでも。
注: この質問に関連する情報のみを表示しました。
関連アイテムを表示する際に、この問題を解決する方法を知りたいです。できればアノテーションのみを使用してください。
ありがとう。