Пользовательский список вариантов поля sonata_type_model с Sonata Admin

Я использую Sonata Admin, и у меня есть поле категорий, и мне нужно показать их по порядку, как дерево при выборе:

<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>

Это возможно? Я пробовал включать в '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)); 
}

Это показывает ошибку:

The option "choice_list" with value "Array" is expected to be of type "null", "Symfony\Component\Form\Extension\Core\ChoiceList\ChoiceListInterface"

Я не уверен, должен ли я использовать тип поля «sonata_type_model» или «выбор»


person Raúl    schedule 28.08.2013    source источник


Ответы (3)


Хорошо, у меня есть список категорий, упорядоченных в дереве, чтобы включить его в связанный объект следующим образом:

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
        ))
        ...
    ; 
}

Я надеюсь, что это может помочь кому-то

person Raúl    schedule 28.08.2013
comment
Мне пришлось использовать CompanyMyBundle:Category. - person Patrick; 10.12.2014
comment
Привет, вы пробовали это с обязательной ложью? Я получаю и продолжаю получать значение null, за исключением категории, и вместо этого получил значение null, спасибо - person Simon Berton; 08.10.2018
comment
Нашел свое решение. Если вы хотите, чтобы это было «требуется» => false. setCategory(Category $category = null), поэтому при отправке формы она не устанавливает значение null и выдает ошибку. - person Simon Berton; 08.10.2018

Пытаться:

->add('category', 'entity', array(
        'class'    => 'Acme\Entity\Category',
)

Это будет работать, только если у вас есть объект Category.

См. эту статью о создании редактора дерева для объекта Category для SonataAdminBundle. . Вот та же статья на русском языке, но с отсутствующим кодом в первом варианте.

person TautrimasPajarskas    schedule 28.08.2013

После прочтения приведенных выше ответов мне пришлось сделать следующее, чтобы получить функциональность, за которой был OP:

protected function configureFormFields(FormMapper $formMapper)
{

$em = $this->modelManager->getEntityManager('YourBundleFile\YourBundleFileBundle\Entity\YourEntity');

$qb = $em->createQueryBuilder();

$qb = $qb->add('select', 'u')
        ->add('from', 'YourBundleFile\YourBundleFileBundle\Entity\YourEntity u');

$query = $qb->getQuery();
$arrayType = $query->getArrayResult();

$formMapper
->add('yourProperty', 'choice', array('choices'=>$arrayType))
-end();
}
person sjt003    schedule 25.04.2014