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,
)
);
}
}