Pregunta

Existe el siguiente código

    $form->with('Item')->add('parent', null, array(
                                        'label' => 'Category',
                                        'required' => true,
                                        'query_builder' => 
                                        function($er) use ($id) {
                                            $qb = $er->createQueryBuilder('p');
                                                if ($id){
                                                    $qb->where('p.id <> :id')
                                                       ->setParameter('id', $id);
                                                }
                                            $qb->orderBy('p.root, p.lft', 'ASC');
                                            return $qb;
                                         }
                                       .........

El resultado es la colección de objetos de entidad que se proporciona a la cadena (método __toString).Devuelve el campo de nombre.Pero necesito obtener otro campo: URL.

¿Cómo obtener el valor de la URL en lugar del nombre en el formulario de lista de selección?El objeto de retorno de tipo query_builder => ¿cómo cambiar esta forma para que funcione de la misma manera query_builder?

¿Fue útil?

Solución

No trabajé con los formularios de SonataAdminBundle, pero creo que funciona absolutamente como los formularios de Symfony.Todo lo que necesitas aquí es agregar 'class' y 'property' valores a su lista de opciones:

$form->with('Item')->add('parent', null, array(
    'class' => 'Acme\DemoBundle\Entity\Category',
    'property' => 'url',
    'label' => 'Category',
    'required' => true,
    'query_builder' => 
    function($er) use ($id) {
        $qb = $er->createQueryBuilder('p');
            if ($id){
                $qb->where('p.id <> :id')
                   ->setParameter('id', $id);
            }
        $qb->orderBy('p.root, p.lft', 'ASC');
        return $qb;
     }

propiedad - es el nombre del campo en su entidad que representará el valor de su entidad en lugar de llamar __toString().Pero también...Si siempre necesita representar su entidad como URL, simplemente puede anularla __toString() método en la clase Entidad a algo como eso:

public function __toString() {
    return $this->url;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top