Hola buen dia!
Nos encontramos con el siguiente problema:
Tenemos un formulario con un combo_editable, que se llena con un array de 2 parametros. Al enviar el formulario, si éste no pasa alguna de las validaciones, los EF intentan persistir los datos al recargar la página y el combo_editable se rompe porque intenta recuperar el dato con un valor y recibe un array.
El error que muestra es :
toba_error_def: Se esta pasando un array o una matriz a un campo que espera un valor escalar [TRAZA]
toba_error_def: Se esta pasando un array o una matriz a un campo que espera un valor escalar in C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\lib\toba_escapador.php:72
Stack trace:
#0 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\lib\toba_escapador.php(23): toba_escapador->quitar_tags(Array)
#1 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\lib\toba_varios.php(866): toba_escapador->escapeHtml(Array)
#2 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\lib\interface\toba_form.php(38): texto_plano(Array)
#3 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\efs\toba_ef_combo_editable.php(76): toba_form::select('ef_form_2426_fr...', '31', Array, 'ef-combo', ' tabindex='2'', NULL)
#4 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_formulario.php(1230): toba_ef_combo_editable->get_input()
#5 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_formulario.php(1241): toba_ei_formulario->generar_input_ef('id_area', true)
#6 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_formulario.php(1176): toba_ei_formulario->get_input_ef('id_area')
#7 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_formulario.php(1140): toba_ei_formulario->get_html_ef('id_area', NULL)
#8 C:\Proyectos_toba\weme3-0\php\consultas\ope_form_desarchivar.php(16): toba_ei_formulario->generar_html_ef('id_area')
#9 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_formulario.php(996): ope_form_desarchivar->generar_layout()
#10 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_formulario.php(976): toba_ei_formulario->generar_formulario()
#11 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_pantalla.php(564): toba_ei_formulario->generar_html()
#12 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_pantalla.php(548): toba_ei_pantalla->generar_layout()
#13 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_pantalla.php(514): toba_ei_pantalla->generar_html_contenido()
#14 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ei_pantalla.php(453): toba_ei_pantalla->generar_html_cuerpo()
#15 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\componentes\interface\toba_ci.php(835): toba_ei_pantalla->generar_html()
#16 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\toba_solicitud_web.php(252): toba_ci->generar_html()
#17 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\toba_solicitud_web.php(185): toba_solicitud_web->servicio__generar_html(Array)
#18 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\toba_solicitud_web.php(60): toba_solicitud_web->procesar_servicios()
#19 C:\Proyectos_toba\weme3-0\vendor\siu-toba\framework\php\nucleo\toba_nucleo.php(96): toba_solicitud_web->procesar()
#20 C:\Proyectos_toba\weme3-0\www\administracion.php(34): toba_nucleo->acceso_web()
#21 {main}
Nuestra solución fue agregarle una validación al archivo toba_ef_combo_editable.php dentro del nucleo:
if (is_array($this->opciones)){
$this->opciones = $this->opciones[0];
}
$html .= toba_form::select($this->id_form, $estado ,$this->opciones, 'ef-combo', $js . $this->input_extra.$extra, $this->categorias);
Para que de esta manera, si el valor que recibe es un array, reciba el valor que necesita y recargue correctamente.
Mi pregunta es: Existe alguna manera de extender el combo_editable para no tener que estar tocando el núcleo? O es una especie de bug y esperamos una corrección?
Saludos