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 .