2012-09-10 14 views
7

Estoy usando Gedmo Doctrine Extensions, como SoftDeletable, y en varios puntos necesito deshabilitar este filtro para que los usuarios puedan interactuar con entidades eliminadas de forma automática o relaciones de eliminación de datos de una entidad.¿Existe alguna forma más inteligente de deshabilitar los filtros de Doctrine2 en Symfony2.1?

Esto incluye, pero no se limita a, una vez en un controlador y nuevamente en un área específica de SonataAdmin.

Hasta ahora, la solución que he encontrado es llamar a getFilters() en el em y desactivar softdeleteable, lo cual está bien.

Sin embargo ambas clases y los controladores de administración sonata parecen pasar por múltiples ejecuciones, lo que provoca un grave intento de desactivar un filtro ya personas con discapacidad, por lo que tengo que hacer esto:

if (array_key_exists('softdeleteable', $this->em->getFilters()->getEnabledFilters())) { 
     $this->em->getFilters()->disable('softdeleteable'); 
    } 

que parece en sí hacky decir El menos.

Pero también hay otros problemas, como el alcance del comando. Aún no he visto ningún problema frontend, pero en el administrador, las múltiples ejecuciones, una de las cuales es construir la navegación (creo), significa que el filtro siempre está desactivado, y solo es posible hacerlo directamente en el em. me parece que causará muchísimos problemas tan pronto como no quiera la funcionalidad deshabilitada en algún lugar.

¿Hay una mejor manera de hacerlo?

Respuesta

3

Mientras que en el momento de la escritura, la respuesta era no, ahora se ha añadido la funcionalidad para desactivar filtros en función de cada entidad, así:

// Enable/Disable filter filter, for specified entity (default is enabled for all) 
$filter = $em->getFilters()->enable('soft-deleteable'); 
$filter->disableForEntity('Entity\Article'); 
$filter->enableForEntity('Entity\Article'); 

Documentación: https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md

+0

Buena captura . 'disableForEntity()' tiene que implementarse en el filtro. Compruebe la implementación ['SoftDeletable'] (https://github.com/l3pp4rd/DoctrineExtensions/blob/master/lib/Gedmo/SoftDeleteable/Filter/SoftDeleteableFilter.php#L53) –

Cuestiones relacionadas