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!
2 respostas em “Como Passar Argumentos ou Parametros no Zend_Form”
Excelente post!!!
Testei e funcionou perfeitamente, mas gerou uma duvida. Quando faço a classe do Zend_Form com o init() não funciona. Você sabe porque?
—–
class Application_Form_Qualquer extends Zend_Form
{
protected $param;
public function __construct($options = null, $param = null)
{
parent::__construct( $options );
print_r($param);
}
}
Como está acima, funciona. Subistituindo __construct por init não funciona mais. Quando agente cria um form pelo Zend_Tool ele cria automaticamente a classe com o init(), portanto eu suponho que a Zend prefira que usemos o init(). O que você acha disso??? Você ja testou com o init()???
Renan 30
Cara, você me salvou! Show!