segunda-feira, 3 de outubro de 2011

Zend_Form_Element_MultiCheckbox

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.