从symfony2中的对象创建数组

从symfony2中的对象创建数组,symfony,Symfony,我正在尝试访问数据库中的类别列表,并将它们放入Symfony2的表单中 public function productAddAction() { $product = new Product(); $categories = $this->getDoctrine() ->getRepository('AudsurShopBundle:Category') ->findAll();

我正在尝试访问数据库中的类别列表,并将它们放入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,
                ))

我知道这是基本的,但我似乎找不到正确的关键字来找到答案(我应该找什么?

IRC,我认为有一种类型:


如果我理解你的意思,这对你想做的任何事情都会有帮助。:)

IRC,我认为有一种类型:

如果我理解你的意思,这对你想做的任何事情都会有帮助。:)

首先,“这是错误的”并不是一个具体的错误信息,我们可以帮助您。这就像说“我的代码不工作”,却不告诉我们原因。继续讨论你的实际问题

您没有使用正确的表单类型来处理实体类型并正确显示它。正如@Talus提到的,您需要的字段类型是。您缺少一些东西,例如
参数和
属性
参数(假设您没有在实体类中编写
\u toString()
函数)

由于您使用的是所有存在的
Category
实体,因此实际上不需要
findAll()
查询。您可以选择以下选项:

如果您正在查找类别的特定子集,您可以像Prefore或那样使用
choices
属性。

首先,“this is error”(这是错误的)并不是一条特定的错误消息,我们可以为您提供很多帮助。这就像说“我的代码不工作”,却不告诉我们原因。继续讨论你的实际问题

您没有使用正确的表单类型来处理实体类型并正确显示它。正如@Talus提到的,您需要的字段类型是。您缺少一些东西,例如
参数和
属性
参数(假设您没有在实体类中编写
\u toString()
函数)

由于您使用的是所有存在的
Category
实体,因此实际上不需要
findAll()
查询。您可以选择以下选项:


如果要查找类别的特定子集,可以使用prefore或那样的
choices
属性。

您可以从数据库解析数组:

在存储库findalarray()中创建一个方法:

然后在控制器中调用它并获取所有类别:

$categories = $this->getDoctrine()
    ->getRepository('AudsurShopBundle:Category')
    ->findAllArray();    
获得阵列后,使其适合
选择
(创建新阵列
$choices
):

然后将此新数组放入表单:

->add('category', 'entity', array(
        'choices' => $choices,

希望有帮助。祝您愉快。

您可以从数据库解析数组:

在存储库findalarray()中创建一个方法:

然后在控制器中调用它并获取所有类别:

$categories = $this->getDoctrine()
    ->getRepository('AudsurShopBundle:Category')
    ->findAllArray();    
获得阵列后,使其适合
选择
(创建新阵列
$choices
):

然后将此新数组放入表单:

->add('category', 'entity', array(
        'choices' => $choices,

希望有帮助。祝你度过愉快的一天。

我不确定这是不是我的意思。我知道列表有表单函数。但是,一旦我从数据库中检索到了我的类别,我该如何将该对象更改为可以放入表单函数中的内容呢?我不确定这是否是我的意思。我知道列表有表单函数。但是,一旦我从数据库中检索到了我的类别,我该如何将该对象更改为可以放入表单函数中的内容呢?
$choices = array();
foreach ($categories as $category) {
    $choices[$value['id']] = $value['title'];
}
->add('category', 'entity', array(
        'choices' => $choices,