Error en el elemento Checkbox de Zend_Dojo_Form

Hoy estuve trabajando con este componente (Zend_Dojo_Form_Element_CheckBox) y me di con la sorpresa de que no funcionaba correctamente. Lo que pasa que hay un pequeño error en Zend/Dojo/View/Helper/CheckBox.php el cual no genera correctamente el HTML

Este error afecta a hasta la versión Zend Framework 1.6.1 y aun tampoco se ha solucionado en la versión de desarrollo.

Veamos un ejemplo

class TestController extends Zend_Controller_Action
{
	function indexAction ()
    {
		$this->view->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
		$form = new Zend_Dojo_Form();
		$form->addElement(
		    'CheckBox',
		    'checkboxValue',
		    array(
		        'label'        => 'Label',
		        'checkedValue' => 'checkedValue',
			'uncheckedValue' => 'notCheckedValue',
		    )
		);

		$form->addDecorators(array('FormElements', 'Form'));
		$this->view->form = $form;
	}
}

Esto produce el siguiente HTML:

<!-- Erroneo//-->
<input name="checkboxValue" type="hidden" value="0" />
<input id="checkboxValue" name="checkboxValue" type="checkbox" value="notCheckedValue" /> 

Pero debería generar el siguiente HTML

<!-- Debería producir//-->
<input name="checkboxValue" type="hidden" value="notCheckedValue" />
<input id="checkboxValue" name="checkboxValue" type="checkbox" value="checkedValue" /> 

Esto genera que los datos siempre se envíen vacíos, quiere decir si marcamos el checkbox este llegará vació, como si no lo hubiésemos marcado.

Solución
Aun no existe un parche oficial para este problema, pero si queremos seguir trabajando podemos editar el helper del checkbox ubicado en Zend/Dojo/View/Helper/CheckBox.php y agregar una pequeña línea de código para solucionarlo, hasta esperar que corrijan dicho problema.

Hay que agregar lo siguiente $checkedOptions = $attribs['options']; después de la línea 74

 public function checkBox($id, $value = null, array $params = array(), array $attribs = array(), array $checkedOptions = null)
    {
        // Prepare the checkbox options
        require_once 'Zend/View/Helper/FormCheckbox.php';
        $checked = false;
        if (isset($attribs['checked']) && $attribs['checked']) {
            $checked = true;
        } elseif (isset($attribs['checked'])) {
            $checked = false;
        }
		//Linea Añadida < -----
	    $checkedOptions = $attribs['options'];

        $checkboxInfo = Zend_View_Helper_FormCheckbox::determineCheckboxInfo($value, $checked, $checkedOptions);
        $attribs['checked'] = $checkboxInfo['checked'];
        if (!array_key_exists('id', $attribs)) {
            $attribs['id'] = $id;
        }

        $attribs = $this->_prepareDijit($attribs, $params, 'element');

        // strip options so they don't show up in markup
        if (array_key_exists('options', $attribs)) {
            unset($attribs['options']);
        }
//.............

El equipo de Zend ya esta haciendo un seguimiento a este problema y pronto tendremos la solución:

Aquí pueden ver la respuesta a mi pregunta sobre dicho error
http://www.nabble.com/Error-Zend_Dojo-CheckBox-td19910115.html

Issue Tracker
http://framework.zend.com/issues/browse/ZF-4274

Compartir
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • BarraPunto
  • LinkedIn
  • Linkter
  • Meneame
  • MySpace
  • RSS
  • Technorati
  • Twitter
  • Yahoo! Bookmarks

Etiquetas: , , ,

Artículos Relacionados
  • No hay Post relacionados

Una respuesta Para:
“ Error en el elemento Checkbox de Zend_Dojo_Form”

  1. Me parecio excelente la parte de bugs de Zend Framework, al minuto de haber reportado un error en Zend_Db_Adapter_Oracle los flacos respondieron enseguida, y ya lo agregaron el la version 1.6.1

Leave a Reply

Security Code: