es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El filtro de la cuadrícula de Sonata admin no puede hacer que funcione el ChoiceType.

Estoy desesperado con este. En Sonata Admin 3.x tenía este filtro en la vista de lista, que proporcionaba un cuadro de selección con las opciones descritas.

protected function configureDatagridFilters(DatagridMapper $datagridMapper): void 
{
    ->add('state', 'doctrine_orm_choice',
            array('label' => 'Estado'),
            ChoiceType::class, array(
                'choices' => array(
                    'nuevo' => 'nuevo',
                    'abierto' => 'abierto',
                    'cerrado' => 'cerrado' ),
                    'required' => false
                )
        )
}

Pero al actualizar a 4.x obtuve el siguiente error:

No existe ningún servicio adjunto con el nombre 'doctrine_orm_choice'

He probado de todo, desde ChoiceType hasta ChoiceFilter, pero no puedo encontrar ningún fragmento en la documentación o ninguna pista relevante sobre cómo se supone que funciona ahora.

¡Muchas gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con el tipo de filtrado para el campo “state”. En Sonata Admin 3.x se utilizaba el tipo “doctrine_orm_choice”, pero parece que ya no está disponible en Sonata Admin 4.x.

    Puedes intentar usar en su lugar el tipo “Symfony\Component\Form\Extension\Core\Type\ChoiceType”, como se muestra en el fragmento de código de ejemplo a continuación:

    protected function configureDatagridFilters(DatagridMapper $datagridMapper): void 
    {
        ->add('state', 'doctrine_orm_callback', [
            'label' => 'State',
            'callback' => function ($queryBuilder, $alias, $field, $value) {
                if (!$value['value']) {
                    return;
                }
    
                $queryBuilder->andWhere(sprintf('%s.state = :state', $alias))
                    ->setParameter('state', $value['value']);
            },
            'field_type' => ChoiceType::class,
            'field_options' => [
                'choices' => [
                    'new' => 'new',
                    'open' => 'open',
                    'closed' => 'closed',
                ],
            ],
        ]);
    }
    

    En este ejemplo, se utiliza el tipo “doctrine_orm_callback” en lugar de “doctrine_orm_choice”, y se define una función de retorno para aplicar el filtro según el valor seleccionado. Se utiliza el tipo “Symfony\Component\Form\Extension\Core\Type\ChoiceType” para definir el cuadro de selección con las opciones disponibles.

    Espero que esto ayude a resolver el problema que estás enfrentando con Sonata Admin 4.x. Avísame si tienes alguna pregunta o inquietud adicional.

Comments are closed.