Yo lo encaré, primero, de la siguiente manera:
En el evento del CI padre, configuré un evento (por ejemplo) “Guardar”, que contenía lo siguente:
...
foreach($this->dep('ci_edicion')->get_dependencias_clase('form') as $formulario){
$this->dep('ci_edicion')->dep($formulario)->validar_estado();
}
...
El problema, es que todos los formularios obtenidos por ese bucle, están vacíos, sin estado (aún cuando los formularios tienen datos), y esto no se porque sucede (Si alguien lo puede explicar, sería un golazo al ángulo).
Lo que hice entonces fue, en el ci_edicion (CI hijo), en su método conf() coloqué el siguiente código:
//esto va fuera del conf (se define la variable de sesión)
public $s__estado_forms;
//esto va dentro del conf() del CI
if(!isset($this->s__estado_forms)){
$this->s__estado_forms = array();
foreach($this->get_dependencias_clase('form') as $formulario){
$this->s__estado_forms[$formulario] = false;
}
}
Una vez hecho eso, en cada evt__formulario_x__modificacion(), agrego como última línea lo siguiente:
$this->s__estado_forms['formulario_actual'] = true;
Entonces, por cada evento implicito que se va disparando para cada formulario, se va a guardar el valor TRUE (si es que ya se pasó por ese formulario)
Al final, en el CI padre, el evento evt__guardar() queda así:
function evt__cerrar()
{
foreach($this->dep('ci_edicion')->s__estado_forms as $formulario => $valido){
if(!$valido){
$nombre_form = $this->dep('ci_edicion')->dep($formulario)->get_titulo();
throw new toba_error("Debe completar los datos del formulario $nombre_form");
}
}
}
Espero sirva de ayuda.
Saludos