我试图访问我在数据库中的类别列表,并将它们放入Symfony2中的表单中。
public function productAddAction()
{
$product = new Product();
$categories = $this->getDoctrine()
->getRepository('AudsurShopBundle:Category')
->findAll();
$form = $this->createFormBuilder($product)
->add('category', 'choice', array(
'choices' => $categories, /* this is wrong */
'multiple' => false,
))
->add('name', 'text')
->add('save', 'submit', array('label' => 'Create Task'))
->getForm();
return $this->render('AudsurAdminBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
如何从$ categories转到我可以放入以下部分的对象,并且它符合函数所期望的内容?
->add('category', 'choice', array(
'choices' => $categories, /* this is wrong */
'multiple' => false,
))
我知道这是基本的,但我似乎无法找到合适的关键字来找到答案(我应该寻找什么?)
答案 0 :(得分:2)
IRC,我认为有一种类型:http://symfony.com/fr/doc/current/reference/forms/types/entity.html
如果我理解你的意思,这应该有助于你想做什么。 :)
答案 1 :(得分:2)
首先,"这是错误的"不是一个特定的错误消息,我们非常帮助您。这就像说'#34;我的代码不起作用"并没有告诉我们原因。继续你的实际问题..
您没有使用正确的表单类型来处理实体类型并正确显示它。正如@Talus提到的,您需要的字段类型是entity
。您遗失了一些内容,例如class
参数和property
参数(假设您未在实体中编写__toString()
个功能类。)
$categories = $this->getDoctrine()
->getRepository('AudsurShopBundle:Category')
->findAll();
$form = $this->createFormBuilder($product)
->add('category', 'entity', array(
'class' => 'AudsurShopBundle:Category',
'choices' => $categories,
'multiple' => false,
'property' => 'name', // This needs to be an actual property, I just assumed name
))
->add('name', 'text')
->add('save', 'submit', array('label' => 'Create Task'))
->getForm();
由于您使用了所有Category
个实体,因此findAll()
查询实际上不是必需的。您可以转而使用basic usage:
$form = $this->createFormBuilder($product)
->add('category', 'entity', array(
'class' => 'AudsurShopBundle:Category',
'multiple' => false,
'property' => 'name', // This needs to be an actual property, I just assumed name
))
->add('name', 'text')
->add('save', 'submit', array('label' => 'Create Task'))
->getForm();
如果您正在寻找类别的特定子集,则可以使用之前的choices
属性或pass a query_builder
。
答案 2 :(得分:0)
您可以从数据库中解析数组:
在资源库findAllArray()中创建一个方法:
public function findAllArray() {
return $this->getEntityManager()
->createQuery(
'SELECT Category '.
'FROM AudsurShopBundle:Category AS Category'
)
->getArrayResult();
}
然后在您的控制器中调用它并获取所有类别:
$categories = $this->getDoctrine()
->getRepository('AudsurShopBundle:Category')
->findAllArray();
当你有数组时,让它适合choice
(创建新数组$choices
):
$choices = array();
foreach ($categories as $category) {
$choices[$value['id']] = $value['title'];
}
然后将这个新数组放入表格中:
->add('category', 'entity', array(
'choices' => $choices,
希望它有所帮助。祝你有愉快的一天。