У меня есть тип категории формы symfony2 с формой сборки:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('language', 'entity', array(
'class' => 'Evr\HomeBundle\Entity\Language',
'property' => 'language'
)
)
->add('category', 'text', array('label' => 'category.category', 'required' => true));
}
Как и следовало ожидать, у меня есть две сущности: категория и язык, из которых категория является дочерней для языка (один язык может иметь много категорий, а одна категория принадлежит 1 или 0 языкам).
Категория
<?php
namespace Evr\HomeBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Category
*
* @ORM\Table(name="ev_category")
* @ORM\Entity
*/
class Category
{
/**
* @var integer
*
* @ORM\Column(name="category_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
*
* @ORM\ManyToOne(targetEntity="Language",inversedBy="categories")
* @ORM\JoinColumn(name="language_id",referencedColumnName="language_id")
*/
private $language;
/**
* @var string
*
* @ORM\Column(name="category", type="string", length=255)
*/
private $category;
/**
* @ORM\OneToMany(targetEntity="Subcategory", mappedBy="category")
*/
protected $subcategories;
public function __construct(){
$this->subcategories=new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set language
*
* @param integer $language
* @return Category
*/
public function setLanguage($language) {
$this->language = $language;
return $this;
}
/**
* Get language
*
* @return integer
*/
public function getLanguage() {
return $this->language;
}
/**
* Set category
*
* @param \string $category
* @return Category
*/
public function setCategory($category)
{
$this->category = $category;
return $this;
}
/**
* Get category
*
* @return \string
*/
public function getCategory()
{
return $this->category;
}
}
Язык
<?php
namespace Evr\HomeBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* Language
*
* @ORM\Table(name="ev_language")
* @ORM\Entity
*/
class Language
{
/**
* @var integer
*
* @ORM\Column(name="language_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="language", type="string", length=128)
*/
private $language;
/**
* @var string
*
* @ORM\Column(name="code", type="string", length=10)
*/
private $code;
/**
* @var boolean
*
* @ORM\Column(name="direction", type="boolean")
*/
private $direction;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="language")
*/
protected $categories;
/**
* @ORM\OneToMany(targetEntity="Country", mappedBy="language")
*/
protected $countries;
public function __construct(){
$this->categories=new ArrayCollection();
$this->countries=new ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set language
*
* @param string $language
* @return Language
*/
public function setLanguage($language)
{
$this->language = $language;
return $this;
}
/**
* Get language
*
* @return string
*/
public function getLanguage()
{
return $this->language;
}
/**
* Set code
*
* @param string $code
* @return Language
*/
public function setCode($code)
{
$this->code = $code;
return $this;
}
/**
* Get code
*
* @return string
*/
public function getCode()
{
return $this->code;
}
/**
* Set direction
*
* @param boolean $direction
* @return Language
*/
public function setDirection($direction)
{
$this->direction = $direction;
return $this;
}
/**
* Get direction
*
* @return boolean
*/
public function getDirection()
{
return $this->direction;
}
}
При редактировании категории мне нужно отображать текущие значения в форме, чтобы пользователь мог их изменить и сохранить.
Здесь у меня есть контроллер editAction(), задачей которого является отображение формы редактирования:
public function editAction($id) { //id of the category to modify
$category = $this->getDoctrine()->getRepository('EvrHomeBundle:Category')->find($id); //return the category with id
$categoryForm = $this->createForm(new CategoryType(),$category); //building the form
return $this->render('EvrAdminBundle:Categories:edit.html.twig', array('categoryForm' => $categoryForm->createView(), 'category' => $category));
}//render the form
Помните, что у CategoryType есть элемент типа : entity, который загружает языки в поле выбора.
Но при попытке заполнить форму CategoryType текущими данными (категория и язык), Symfony возвращает ошибку: Entity Not Found
Symfony не указывает, в какой строке возникает ошибка, но я думаю, что она находится примерно в этой строке:
$categoryForm = $this->createForm(new CategoryType(),$category); //building the form
Потому что, когда я удаляю второй аргумент createForm
: $category
, он отображает пустую форму (точно так же, как add category form
Есть ли решение этой проблемы? И как мне создать форму с текущими данными из базы данных, учитывая то, что она содержит элемент сущности.
Спасибо