Como Passar Argumentos ou Parametros no Zend_Form

Ai vai mais uma pegadinha do Zend.

Caso você deseje passar algum argumento ou mesmo parametros dendo da classe extendida a partir de Zend_Form, duas coisas podem acontecer, você pode levar sorte e de cara descobrir como se faz isto, ou acabar aqui lendo este post.

Por padrão bastaria fazer isto:


class Application_Form_Maluco extends Zend_Form
{
    public function __construct( $meuArgumentoQuerido = null )
    {
        $this->_meuArgumentoQuerido = $meuArgumentoQuerido;
    }
}

Pela lógica seria isto, mas não é!

O négocio é mais embaixo um pouco.

Você precisa declarar o construtor de Zend_Form chamando o argumento “$options” e passar ele no “seu” construtor, ou seja, o construtor da classe que voce está criando.


class Application_Form_Maluco extends Zend_Form
{
    public function __construct( $meuArgumentoQuerido = null )
    {
        $this->_meuArgumentoQuerido = $meuArgumentoQuerido;
        parent::__construct( $options );
    }
}

Mas mesmo assim não vai funcionar!

Ainda é preciso passar o argumento $options junto com os argumentos que estamos criando, e expecificamente, $options tem que vir na frente, assim:


class Application_Form_Maluco extends Zend_Form
{
    public function __construct( $options = null, $meuArgumentoQuerido = null )
    {
        $this->_meuArgumentoQuerido = $meuArgumentoQuerido;
        parent::__construct( $options );
    }
}

E para finalizar, ainda não vai funcionar!!! Calma, agora só falta mais um ajuste, não se desespere! Há esperança!

Para concluir informe a propriedade correspondente aos argumentos desejados assim com a visibilidade protected:


class Application_Form_Maluco extends Zend_Form
{

    protected $meuArgumentoQuerido;

    public function __construct( $options = null, $meuArgumentoQuerido = null )
    {
        $this->_meuArgumentoQuerido = $meuArgumentoQuerido;
        parent::__construct( $options );
    }
}

E pronto! Agora, para passar qualquer paramentro, você DEVE colocar NULL antes do seu parametro, assim:


$form= new Application_Form_Maluco( null, 'ufa' );

Qualquer dúvida ou erros, postem nos cometários!