Bem, decidi postar sobre Zend_Form_Element_MultiCheckbox pois estou trabalhando com Zend e tive algumas dificuldades com este componente, depois de feito parece fácil, mas para quem está começando é bem complicado.
Primeiramente, deve-se criar um projeto com a estrutura do zend, após isso, na pasta "form", criar um form que extende Zend_Form.
No método init(), iremos adicionar todos os elementos necessários para a página que estamos criando, neste caso irei colocar somente o trecho do elemento Zend_Form_Element_MultiCheckbox.
exemplo:
<?php
class Form_Role extends Zend_Form
{
public function init()
{
$element = new Zend_Form_Element_MultiCheckbox('foo');
$element->addMultiOption('foo', 'foo Option');
$element->addMultiOption('bar', 'bar Option');
$element->addMultiOption('baz', 'baz Option');
$this->addElements(array($element));
$this->setDecorators ( array (array ('ViewScript', array ('viewScript' => '/role/decorator/formRole.phtml' ) ) ) );
}
}
Repare que no final tenho a seguinte linha de comando: "$this->setDecorators ( array (array ('ViewScript', array ('viewScript' => '/role/decorator/formRole.phtml' ) ) ) );" isso significa que na pasta "view" do meu sistema, tenho uma pasta role e dentro dela uma pasta decorator com o arquivo formRole.phtml.
Arquivo formRole.phtml:
<form action="<?php echo $this->element->getAction() ?>"
method="<?php echo $this->element->getMethod() ?>"
id="<?php echo $this->element->getName() ?>">
<?php echo $this->element->foo->render(); ?>
</form>
Note que estou colocando o elemento que criei na minha classe Form_Role no meu Html, o comando "<?php echo $this->element->foo->render(); ?>" pe responsável por fazer isso. O nome do meu elemento é "foo" na classe Zend_Form ($element = new Zend_Form_Element_MultiCheckbox('foo');), o mesmo que coloco no html.
Para recuperar o valor dos checkbox's que serão criados dentro deste elemento, que é um array, basta implementar o seguinte código na classe que irá controlar a página.
Classe controller:
class RoleController extends Zend_Controller_Action {
public function indexAction()
{
\\retorna um array com todos valores dos checkbox's que estão checados;
$form->getElement('foo')->getValue();
\\para retornar o valor de somente um checkbox específico, basta receber este valor em \\uma variável e colocar o indice desejado, por exemplo:
$a = $form->getElement('foo')->getValue();
print_r($a[1]);\\imprime 'bar' na página;
die(); \\mata o processo
}
}
Espero ter ajudado.
Até a próxima.