variable sanitizar que las funciones filtrar filtrado filter_sanitize_string existen example datos con clasifican php doctrine2 zend-framework2 zend-form

php - sanitizar - Colecciones de formularios ZF2: filtrado de registros vacíos



php sanitize variable (1)

Debe obtener los datos de la solicitud antes de pasarlos a EntityManager, eso es seguro. Simplemente agregue su propia validación para filtrar los registros vacíos. También puede proporcionar filtros de JavaScript que atraparán el evento de formulario de envío y eliminarán campos vacíos antes de enviarlo.

Estoy tratando de averiguar cómo filtrar los registros vacíos de una colección de formularios. Con mi aplicación tengo 2 entidades, Competition y League . Una competencia puede tener cero o más Ligas.

Así que creo un formulario de competencia ( CompetitionForm ), un fieldset de CompetitionFieldset ( CompetitionFieldset ) y un fieldset de League ( LeagueFieldset ).

CompetitionFieldset se agrega a CompetitionForm , y CompetitionFieldset usa Zend/Form/Element/Collection para permitir al usuario agregar 1 o más Leagues. He agregado el código actual para cada clase a continuación.

De forma predeterminada, quiero mostrar campos de entrada para 3 ligas dentro de una competencia, por lo que dentro de CompetitionFieldset , cuando agrego el elemento Zend/Form/Element/Collection , configuro la opción de conteo en 3.

Pero si un usuario no proporciona ningún dato para las ligas, quiero ignorarlas. En la actualidad, se crean tres ligas asociadas vacías dentro de mi base de datos.

Si configuro un InputFilter en LeagueFieldset para hacer que el campo de name obligatorio, por ejemplo, el formulario no se validará.

También debería mencionar que estoy usando Doctrine2 para modelar mis entidades e hidratar mis formularios, etc.

Estoy seguro de que podría hacerlo funcionar con un código adicional en mis modelos, o incluso en mi Controlador, donde procesaré el formulario, pero estoy seguro de que hay una solución más limpia tal vez usando Filtros.

Si alguien pudiera señalarme en la dirección correcta, sería muy apreciado.

Muchas gracias de antemano por cualquier ayuda que pueda brindar.

:wq familymangreg

Mi CompetitionForm

use Kickoff/Form/AbstractAdminForm; use Doctrine/Common/Persistence/ObjectManager; use DoctrineModule/Stdlib/Hydrator/DoctrineObject as DoctrineHydrator; use Zend/Stdlib/Hydrator/ClassMethods; class CompetitionForm extends AbstractAdminForm { public function __construct(ObjectManager $objectManager) { parent::__construct($objectManager, ''competition-form''); $fieldset = new CompetitionFieldset($objectManager); $fieldset->setUseAsBaseFieldset(true); $this->add($fieldset); $this->add(array( ''name'' => ''submit'', ''attributes'' => array( ''type'' => ''submit'', ''value'' => ''Submit'', ''id'' => ''submitbutton'', ), )); } }

My CompetitionFieldset

use Kickoff/Form/AbstractFieldset; use Kickoff/Model/Entities/Competition; use Doctrine/Common/Persistence/ObjectManager; use DoctrineModule/Stdlib/Hydrator/DoctrineObject as DoctrineHydrator; class CompetitionFieldset extends AbstractFieldset { public function __construct(ObjectManager $objectManager) { parent::__construct($objectManager,''Competition''); $this->setHydrator(new DoctrineHydrator($this->objectManager,''Kickoff/Model/Entities/Competition'')) ->setObject(new Competition()); $this->setLabel(''Competition''); $this->add(array( ''name'' => ''name'', ''options'' => array( ''label'' => ''Competition name (e.g. Premier League)'', ), ''attirbutes'' => array( ''type'' => ''text'', ), )); $this->add(array( ''name'' => ''long_name'', ''options'' => array( ''label'' => ''Competition long name (e.g. Barclays Premier League)'', ), ''attirbutes'' => array( ''type'' => ''text'', ), )); $leagueFieldset = new LeagueFieldset($objectManager); $this->add(array( ''type'' => ''Zend/Form/Element/Collection'', ''name'' => ''leagues'', ''options'' => array( ''label'' => ''Leagues'', ''count'' => 3, ''should_create_template'' => true, ''allow_add'' => true, ''target_element'' => $leagueFieldset, ), )); } }

Mi LeagueFieldset

use Kickoff/Form/AbstractFieldset; use Kickoff/Model/Entities/League; use Doctrine/Common/Persistence/ObjectManager; use DoctrineModule/Stdlib/Hydrator/DoctrineObject as DoctrineHydrator; use Zend/InputFilter/InputFilterProviderInterface; class LeagueFieldset extends AbstractFieldset implements InputFilterProviderInterface { public function __construct(ObjectManager $objectManager) { parent::__construct($objectManager,''League''); $this->setHydrator(new DoctrineHydrator($this->objectManager,''Kickoff/Model/Entities/League'')) ->setObject(new League()); $this->setLabel(''League''); $this->add(array( ''name'' => ''name'', ''options'' => array( ''label'' => ''League name (e.g. First Qualifying Round)'', ), ''attirbutes'' => array( ''type'' => ''text'', ), )); $this->add(array( ''name'' => ''long_name'', ''options'' => array( ''label'' => ''League long name (e.g. UEFA Champions League First Qualifying Round)'', ), ''attirbutes'' => array( ''type'' => ''text'', ), )); } public function getInputFilterSpecification() { return array( ''name'' => array( ''required'' => true, ) ); } }