Hiện tại, tôi có bảng bài viết và thẻ. Tôi đang cố gắng tự động điền phần tử biểu mẫu "Thẻ" làm hộp chọn trên biểu mẫu bài viết. Cách tốt nhất để đi về việc thiết lập các tùy chọn giá trị của các thẻ chọn hộp từ một bảng cơ sở dữ liệu và sau đó cũng có bài viết ràng buộc các dữ liệu thẻ tự động trong cuộc gọi phương thức "ràng buộc" là gì?Nhập dữ liệu quan hệ trong Biểu mẫu Zend 2 qua Trình tạo chú thích
Article.php
<?php
// Article class
class Article {
/**
*
* @var \Doctrine\Common\Collections\Collection|Tag[]
*
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="articles")
* @Orm\JoinTable(name="rel_article_tag", joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="article_id")}, inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="tag_id")})
*
* @Form\Required(false)
* @Form\Type("Zend\Form\Element\Select")
* @Form\Options({"label":"Tags: ")
* @Form\Attributes({"id":"tags", "data-placeholder":"Choose tags...", "multiple" : "multiple", "class" : "chosen-select"})
*/
private $tags;
public function __construct()
{
$this->tags = new ArrayCollection();
}
public function getTags()
{
return $this->tags;
}
public function addTags($tags)
{
$this->tags = $tags;
}
public function removeTags()
{
$this->tags = new ArrayCollection();
}
}
ArticleController.php
class ArticleController{
public function editAction()
{
$builder = new AnnotationBuilder();
$form = $builder->createForm(new TblArticle());
$id = 1;
$article = $em->find('Admin\Entity\TblArticle', $id);
$form->bind($article);
}
}
gì tôi đã làm
Trong ArticleController::editAction()
, tôi đã tự động thêm vào các tùy chọn giá trị vào các thẻ yếu tố trên biểu mẫu.
class ArticleController
{
public function editAction()
{
$builder = new AnnotationBuilder();
$form = $builder->createForm(new TblArticle());
// add tag options to form
$sm = $this->getServiceLocator();
$em = $sm->get('Doctrine\ORM\EntityManager');
$tags = $em->getRepository('Admin\Entity\LuTag')->findAll();
$tagOptions = [null => ''];
foreach ($tags as $tag) {
$tagOptions[$tag->getTagId()] = $tag->getName();
}
$form->get('tags')->setValueOptions($tagOptions);
// end add tag options to form
$id = 1;
$article = $em->find('Admin\Entity\TblArticle', $id);
$form->bind($article);
if ($article->getTags()) {
$tagIds = array();
foreach ($article->getTags() as $tag) {
$tagIds[] = $tag->getTagId();
}
$form->get('tags')->setValue($tagIds);
}
}
}
Điều này có vẻ như quá nhiều mã trong bộ điều khiển của tôi, tôi biết điều đó không đúng, nhưng tôi không biết cách làm tốt hơn. Có thể sử dụng FormBuilder để đặt các tùy chọn giá trị cho các phần tử Thẻ?
Cảm ơn.
Tôi không nghĩ điều này là có thể. –