Categorias
Dica Zend Framework

[ Zend Framework ] – Como chamar um Helper dentro de um Form

Boa pergunta!

Você já ouviu dizer que o Zend_Form não tem disponível para uso direto o famoso “$this->view->…” que utilizamos para passar variáveis e objetos para o View de nossa aplicação, pois supostamente, acredito que ele não faça parte do View (risos). Pela lógica, a classe em si não precisaria uma vez que é possivel…

Sim, mas ai vem o caso, e se estou criando um formulário e quero utilizar um helper que ja criei antes? Neste caso, alguem poderia dizer para utilizar um view script para o form e aplicar lá dentro do arquivo em questão as chamadas aos helpers.

É faria sentido, pois ai sim é o lugar de se usar Views, só não faria sentido se eu não quiser ou precisar utilizar tal recurso!

Bom, então para os que depois de buscas e mais buscas sem respostas de como se fazer isto, ai vai a dica:

Preferencialmente no início de seu método init() da classe estendida do Zend_Form que você está criando, insira o seguinte código:


class Application_Form_MeuFormularioDoidao extends Zend_Form
{
    protected $_myhelper;

    public funcion init( )
   {
        $this->_myhelper = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    }
}

E para chamar o seu Helper, apenas faça o que você já conhece:


$seiLaOque = $this->_myhelper->view->meuHelperBonzao();
Categorias
Dica Javascript jQuery Zend Framework

Solicitações Ajax com Zend Framework

O objetivo deste post é dar uma dica de como utilizar solicitações em Ajax com o Zend Framework, uma vez que todas as solicitações são chamadas carregando layout e views, é preciso definir algumas coisinhas para tudo ficar legal!

Para testar vamos criar um controlador chamado resultado e duas ações index e produtos.

Você pode usar qualquer coisa que quiser ali.

Controlador Resultado


// Salve em application/ResultadoController.php
class ResultadoController 
extends Zend_Controller_Action
{
    public function init() { // aqui vem a mágica depois }
    public function indexAction(){}
}
<strong>Acão Produtos</strong>

 lang="php"]
// Salve em scripts/views/resultado/produtos.phtml
<ul> 
    <?php foreach( $this->produtos as $produto) :  ?>
	<li><?=$produto;?></li>
    <?php endforeach; ?>
</ul>

Para testar o resultado, coloque na Ação index do Controlador o código abaixo:

Acão Index


// Salve em scripts/views/resultado/index.phtml
<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <div id="ajax"></div>
        <script type="text/javascript">
            // pode ser no onload para testes
            jQuery( function() {
                $.ajax( {
                    type: "GET",
                    url: '/resultado/produtos/c/' 
                         + Math.random(),
                    success: function( dados ) {
                        $( '#ajax' ).html( dados )
                    }
                } );
            } )
        </script>
    </body>
</html>

Atualize sua a página index e veja que o ajax carregou tudo, incluindo layout e HTML.

Para fins de testes, vamos fazer o seguinte:

Modifique o método ini() do controlador Resultado e acrescente as linhas abaixo


public function init()
{
    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);
}

Agora teste novamente atualizando a página, e veja que o conteudo saiu vazio.

Agora modifique apenas o valor de setNoRender(true) para setNoRender(false).

Atualize a pagina e veja que agora, somente o conteúdo da ação produtos foi carregada.

Bom, é isto ai. Alguma coisa errada ou dúvida postem nos comentários.

Categorias
Dica Zend Framework

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!
 

 

 

 

Categorias
Dica PHP Tutorial Zend Framework

Zend_Form_Element_Captcha – Captchas com Zend Framework

Estes dias fui fazer uma formulário utilizando o elemento Captcha do Zend, e percebi que a própria documentação é incompleta, e segue então abaixo uma forma de voce

e ter total controle sobre o que há disponível de propriedades para você configurar em um Zend_Element_Captcha().

Categorias
Banco de Dados MySQL Zend Framework

Como Mudar o Charset do Banco de Dados para UTF-8 no Zend Framework

Estes dias me deparei com um problema antigo: “Codificação de Caracteres UTF-8”, so que agora eu estava utilizando o Zend.

Se você está com esta necessidade, apenas faça isto em seu arquivo “/config/application.ini“:

 lang="sql

resources.db.params.charset = utf8