使用Sonata Admin自定义选择sonata_type_model字段列表

Raú*_*aúl 13 symfony sonata-admin

我正在使用Sonata Admin并且我有一个类别的字段,我需要像select中的树一样按顺序显示它们:

<select>
    <option>Category father-1</option>
    <option>--Category child-1-1</option>
    <option>--Category child-1-2</option>
    <option>--Category child-1-3</option>
    <option>----Category child-1-3-1</option>
    <option>----Category child-1-3-2</option>
    <option>--Category child-1-4</option>
    <option>--...</option>
    <option>Category father-2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

这是可能的?我试过它在'choice_list'中包含一个getTreeCatsArray方法中的数组生成:

protected function configureFormFields(FormMapper $formMapper)
{
    $tree_cat_array = $this->em->getRepository('MyBundle:Category')->getTreeCatsArray();

    $formMapper
        ->add('category', 'sonata_type_model', array(
                'empty_value' => '', 
                'choice_list' => $tree_cat_array)); 
}
Run Code Online (Sandbox Code Playgroud)

这显示错误:

The option "choice_list" with value "Array" is expected to be of type "null", "Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface"
Run Code Online (Sandbox Code Playgroud)

我不确定是否必须使用字段类型'sonata_type_model'或'choice'

Raú*_*aúl 29

好的,我已经在树中排序了类别列表,将其包含在相关实体中,如下所示:

protected function configureFormFields(FormMapper $formMapper)
{
    $em = $this->modelManager->getEntityManager('MyBundle\Entity\Category');

    $query = $em->createQueryBuilder('c')
                ->select('c')
                ->from('MyBundle:Category', 'c')
                ->where('c.parent IS NOT NULL')
                ->orderBy('c.root, c.lft', 'ASC');

    $formMapper
        ...
        ->add('categoria', 'sonata_type_model', array(
            'required' => true, 
            'query' => $query
        ))
        ...
    ; 
}
Run Code Online (Sandbox Code Playgroud)

我希望它可以帮助别人


Tau*_*kas 8

尝试:

->add('category', 'entity', array(
        'class'    => 'Acme\Entity\Category',
)
Run Code Online (Sandbox Code Playgroud)

这仅在您拥有实体时才有效Category.

请参见本文有关创建树编辑为Category实体SonataAdminBundle.是俄语中的相同文章,但在第一个变体中包含缺少的代码.