type symfony2 formularios symfony doctrine2 doctrine symfony-forms symfony2.4

symfony2 - symfony choice type



Symfony2: ¿Cómo se filtran las opciones de un campo de formulario de elección de entidad por un determinado atributo? (1)

1.) La situación (simplificada)

Tengo dos entidades: una entidad de contenedor, que tiene exactamente 1 entidad de contenido. El content_id se almacena en la entidad contenedor.

2.) Soft-Delete Content-entities

Implementé una función para eliminar por software entidades de contenido, así que agregué un atributo "eliminado" a la entidad de contenido. Todo funciona bien

3.) El problema

Ahora, cuando quiero crear una nueva entidad de contenedor, las elecciones generadas automáticamente muestran TODAS las entidades de contenido, incluso aquellas, que "marqué como eliminado" (delete-attribute = 1).

4.) La pregunta

¿Dónde está el lugar correcto para agregar un "filtro" / "consulta" para mostrar solo los elementos que no están marcados como eliminados? (eliminar! = 1)

5.) Lo que he intentado

a.) view / twig approach: Intenté modificar el renderizado de {{form_widget (form.contentId)}} sin éxito

b) enfoque del controlador: Intenté manipular los datos del formulario en la nueva Acción donde se está creando el formulario ($ form = $ this-> createCreateForm ($ entity)) sin éxito

c.) type / buildForm approach: Intenté cambiar el método buildForm () - otra vez, sin éxito

Sería EXCELENTE si pudiera darme una pista y / o un ejemplo de código corto de dónde podría engancharme en la acción para eliminar las opciones de eliminación suave.

¡Muchas gracias por adelantado!


Está buscando la opción query_builder del campo de entidad.

Puede crear una consulta personalizada que filtre el conjunto de resultados allí.

ejemplo:

$builder->add(''users'', ''entity'', array( ''class'' => ''AcmeHelloBundle:User'', ''query_builder'' => function(EntityRepository $repository) { $qb = $repository->createQueryBuilder(''u''); // the function returns a QueryBuilder object return $qb // find all users where ''deleted'' is NOT ''1'' ->where($qb->expr()->neq(''u.deleted'', ''?1'')) ->setParameter(''1'', ''1'') ->orderBy(''u.username'', ''ASC'') ; }, ));

También puede optar por un enfoque más general que filtre todas las declaraciones seleccionadas usando filtros de doctrina .