2

我正在使用Sonata AdminBundle,我想设置我的选择列表的选定值

我有一个包含字段的类别CategoryID, parentID, tag: 。parentID 可以为 NULL。

我如何构建表单的代码:

// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{        
    // If edit -> get tag and id from tag
    if($this->subject->getCategoryId() !== null)
    {
        $tag_current = $this->subject->getCategoryId()->getTag();
        $tag_current_id = $this->subject->getCategoryId()->getParentid()->getCategoryid();
    }

    $formMapper
        ->add('tag', 'text', array('label' => 'Tag'))
        ->add('name', 'text', array('label' => 'Naam'))
        ->add('nameEN', 'text', array('label' => 'Naam Engels', 'required' => false, 'data' => 'test'))
        ->add('parentcategory', 'entity', array(
            'class' => 'DX\MyBundle\Entity\Category',
            'empty_data'  => null,
            'empty_value' => "GEEN PARENT CATEGORIE",
            'required' => false,
            'data' => $tag_current_id,
            'query_builder' => function(EntityRepository $er) use ($tag_current) {

                return $er->createQueryBuilder('c')
                    ->where('c.parentid IS NULL')
                    ->andWhere('c.tag != :tag')
                    ->andWhere('c.tag != :tag_current')
                    ->setParameter('tag', 'FOTOGRAAF')
                    ->setParameter('tag_current', $tag_current);
            }
        ))
    ;
}

如您所见,我尝试设置data 属性但没有结果。页面加载时始终选择空值。 NO PARENT CATEGORY

My$tag_current_id是一个整数,在这种情况下:11. 我的选择列表如下所示:

<select id="s54ff22c20ca39_parentcategory" name="s54ff22c20ca39[parentcategory]" class="select2-offscreen" tabindex="-1" title="Parentcategory">
    <option value="">GEEN PARENT CATEGORIE</option>
    <option value="1">THEMA</option>
    <option value="11">FREEM SELECTIE</option>
</select>

但仍然没有被选中。我究竟做错了什么?

4

1 回答 1

1

您的查询构建器应该返回所有可用的值,它将自动选择您的数据库值:

$formMapper->add('parentcategory', 'entity', array(
    'class' => 'DX\MyBundle\Entity\Category',
    'empty_data'  => null,
    'empty_value' => "GEEN PARENT CATEGORIE",
    'required' => false,
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('c')
                  ->where('c.parentid IS NULL')
                  ->andWhere('c.tag != :tag')
                  ->setParameter('tag', 'FOTOGRAAF')
    }
))

更新:

这就是我在我的项目中所做的:

$formMapper->add('supplier', 'entity', array(
    'class' => 'AcmeCoreBundle:ShopSupplier',
    'empty_value' => 'None',
    'empty_data' => null,
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('ss')
            ->orderBy('ss.name', 'ASC');
    }
))

它会自动选择数据库值并在未选择时设置 empty_value。如果它在您的项目中不起作用,我不知道。

于 2015-03-11T00:49:04.533 回答