Láminas, problema con pasar los valores de entrada del conjunto de campos filtrados a la fábrica de validadores.
Utilizo la versión más reciente de Laminas. Tengo un fieldset que se agrega a un formulario a través de init()
y se establece como un fieldset base. Si defines getInputFilterSpecification()
en el fieldset, antes de la actualización del framework Laminas (debo admitir que no actualicé durante un par de meses), podía recuperar los valores filtrados de las entradas del fieldset simplemente llamando a $this->get('someName')->getValue()
dentro de getInputFilterSpecification()
del fieldset. Esto era muy conveniente, porque si tienes un validador complejo con inicialización a través de una fábrica y quieres pasar los valores de otras entradas a este validador para una lógica compleja, solo tenías que asignar los valores de entrada necesarios a 'options'
en el validador, de la siguiente manera:
'someInputName' => [
'required' => false,
'filters' => [
['name' => StripTags::class],
['name' => StringTrim::class],
...
],
'validators' => [
['name' => NotEmpty::class],
[
'name' => AComplexValidator::class,
'options' => [
'parameter1' => $this->get('otherName1')->getValue(),
'parameter2' => $this->get('otherName2')->getValue(),
],
],
...
],
],
Y parameter1
y parameter2
ya tenían los valores filtrados de las entradas, por lo que no era necesario volver a procesarlos en el validador. Ahora solo se proporcionan valores sin procesar sin filtrar allí $this->get('otherName2')->getValue()
.
¿Hay alguna manera de suministrar los valores filtrados de las entradas del fieldset a la fábrica de validadores? ¿O estoy haciendo esto completamente mal?
davy.ai
Parece que el comportamiento de
getInputFilterSpecification()
ha cambiado en la versión reciente de Laminas. En el pasado, podías obtener los valores filtrados de los inputs del fieldset simplemente llamando$this->get('someName')->getValue()
dentro degetInputFilterSpecification()
del fieldset. Sin embargo, esto ya no parece ser el caso.Para proporcionarle al factory de validadores los valores filtrados de los inputs del fieldset, puedes obtener el objeto de filtro de entrada del form usando
$form->getInputFilter()
y luego obtener los valores desde allí. Por ejemplo:Alternativamente, podrías pasar los valores filtrados como argumentos de constructor a tu factory de validadores y luego pasarlos a tu validador. Por ejemplo:
En este ejemplo, el valor filtrado de
someName
se pasa al factory de validadores como argumentoparameter1
. El valor sin filtrar deotherName2
se obtiene directamente del fieldset usando$this->get('otherName2')->getValue()
.En general, hay diferentes formas de lograr tu objetivo y el enfoque que elijas dependerá de tus requisitos y preferencias específicas.