Criando um View Helper para Zend Framework

Helper Zend Framework

Helper Zend Framework

O MVC é um padrão de arquitetura de software que busca separar em camadas as principais partes do desenvolvimento. Com ela é possível trabalhar somente com as informações de entrada e fontes de dados, chamados Models. Processar estas informações na camada Controller, que por sua vez envia o resultado pronto para a camada View.

Portanto, em um aplicativo Zend Framework, podemos considerar como camada Model o acesso a informações de um banco de dados, o processamento destes na camada Controller e renderização dos dados na camada View.

Cada camada possui suas responsabilidades e sempre devemos procurar desenvolver o aplicativo respeitando estas regras. Por exemplo, nada impede que uma consulta ao banco de dados seja construída na camada de visualização, quebrando a separação da lógica de programação.

 

Porém, ao seguir estas regras, a camada View não deve receber nenhum tipo de processamento, somente blocos condicionais if-else e laços de repetição while foreach. Entramos com a questão: e se for necessário a formatação de data na camada de visualização? Para isto foram construídos os auxiliares da camada de visualização, chamados View Helpers.

Auxiliares da Visualização

Basicamente, os View Helpers são classes, onde objetos são criados em tempo de execução através de métodos mágicos da camada de visualização.

Mas o que isto quer dizer? Existem classes que são desenvolvidas e armazenadas em um determinado local. Quando necessário, um método com seu nome é invocado na camada de visualização e esta busca a classe, cria uma nova instância, fornece os parâmetros para um método específico deste novo objeto e informa o resultado. Simples, não?

Existem auxiliares prontos, internos ao Zend Framework. Um dos mais importantes é o Zend_View_Helper_Url que trabalha com a Url atual, modificando-a conforme solicitado. Vejamos um exemplo.

<!-- APPLICATION_PATH/views/scripts/index/index.phtml -->
<a href="<?php echo $this->url() ?>">Página Atual</a>

Quando este bloco de código é executado pela camada de visualização, o PHP reconhece que o método url não existe na camada de visualização e invoca o método mágico __call, que busca a classe Zend_View_Helper_Url, cria um novo objeto e chama o método url deste.

Com este View Helper, podemos criar um link para o mesmo local, modificando somente a ação atual da controladora para create:

<!-- APPLICATION_PATH/views/scripts/index/index.phtml -->
<a href="<?php echo $this->url() ?>">Página Atual</a>
<a href="<?php echo $this->url(array('action' => 'create')) ?>">Criar Elemento</a>

Conforme este código, podemos passar como parâmetro um array associativo onde a chave é a posição a ser modificada pelo valor. Isto é muito importante pois, caso haja necessidade de modificação do nome da controladora, este link continua ativo, além de já trabalhar com a inclusão da Url base do aplicativo.

Criando um View Helper

Eu quero criar um auxiliar! Como vamos fazer isto?

Para isto precisamos respeitar algumas regras. Todo auxiliar é uma classe derivada de Zend_View_Helper_Abstract, deve possuir um método com o mesmo nome do último elemento do sistema de pacotes com a primeira letra em caixa baixa, e o arquivo deve possuir o mesmo nome deste último elemento, armazenado em local específico. Muita informação? Calma.

Vamos criar um auxiliar para formatação de datas. Este auxiliar deverá ser invocado na camada de visualização como date. Portanto, o nome da classe do nosso auxiliar deve terminar com o nome Date, armazenado no arquivo APPLICATION_PATH/views/helpers/Date.php e possuir um método date. Vamos à programação:

<?php
/**
 * Formatação de Datas
 * Auxiliar da Camada de Visualização
 * @author Wanderson Henrique Camargo Rosa
 * @see APPLICATION_PATH/views/helpers/Date.php
 */
class Zend_View_Helper_Date extends Zend_View_Helper_Abstract
{
    /**
     * Método Principal
     * @param string $value Valor para Formatação
     * @param string $format Formato de Saída
     * @return string Valor Formatado
     */
    public function date($value, $format = Zend_Date::DATETIME_MEDIUM)
    {
        // Implementação Necessária
    }
}

Pronto. Esta é a estrutura principal do auxiliar da camada de visualização. Agora é necessária a implementação do código no método. Vamos criar um objeto do tipo Zend_Date, informar o valor a ser formatado e solicitar a formatação deste. O código interno ao método ficará:

$date = new Zend_Date();
return $date->set($value)->get($format);

O problema é o seguinte. A cada chamada deste método, um novo objeto do tipo Zend_Date será inicializado, consumindo tempo e processamento. Podemos criar um atributo estático para armazenar este objeto, criando um método de acesso. A classe completa ficará:

<?php
/**
 * Formatação de Datas
 * Auxiliar da Camada de Visualização
 * @author Wanderson Henrique Camargo Rosa
 * @see APPLICATION_PATH/views/helpers/Date.php
 */
class Zend_View_Helper_Date extends Zend_View_Helper_Abstract
{
    /**
     * Manipulador de Datas
     * @var Zend_Date
     */
    protected static $_date = null;
    /**
     * Método Principal
     * @param string $value Valor para Formatação
     * @param string $format Formato de Saída
     * @return string Valor Formatado
     */
    public function date($value, $format = Zend_Date::DATETIME_MEDIUM)
    {
        $date = $this->getDate();
        return $date->set($value)->get($format);
    }
    /**
     * Acesso ao Manipulador de Datas
     * @return Zend_Date
     */
    public function getDate()
    {
        if (self::$_date == null) {
            self::$_date = new Zend_Date();
        }
        return self::$_date;
    }
}

Utilização do Novo Auxiliar

O nosso View Helper poderá ser utilizado na camada de visualização para formatação de datas. Como primeiro parâmetro devemos informar o valor a ser formatado e como segundo, opcional, o formato de saída.

<!-- APPLICATION_PATH/views/scripts/index/index.phtml -->
<!-- Saída: 12/01/2011 15:19:36 -->
<?php echo $this->date('2011-01-12 15:19:36') ?>
<!-- Saída: 12 de janeiro de 2011 15h19min36s BRST -->
<?php echo $this->date('2011-01-12 15:19:36', Zend_Date::DATETIME_LONG) ?>

Considerações Finais

Esta classe é interessante para utilização de formatação de campos Timestamp do banco de dados. Com o Zend_Locale devidamente configurado para adaptar a saída de algumas informações para o cliente, automaticamente a formatação de datas será conforme padrão português brasileiro, característica interna do Zend_Date. Este auxiliar pode ser utilizado tranquilamente em laços de repetição da camada de visualização, não desperdiçando tempo para criar uma nova instância da classe de manipulação de datas.

Os auxiliares da camada de visualização são utilizados como ganchos para processamento na camada de visualização. É como se esta camada solicitasse para uma superior a execução de uma determinada tarefa. Existem outros View Helpers interessantes como o currency para formatação de moeda e vários para criação de barras de navegação.

Lembre-se que estes auxiliares também são classes. Não é necessário que toda a sua lógica fique armazenada no método principal. Utilize sempre outros métodos para encapsulamento ou quem sabe até alguns adaptadores como padrão de projeto.

Post Retirado do Blog Wanderson Camargo

Sobre Ernando de Castro

Olá pessoal meu nome e: Ernando de castro, atualmente trabalha como Desenvolvedor web na empresa Webstorm Internet, sou formado em Tec. informática pela UFV (Universidade federal de viçosa) e faço Analise e Desenvolvimento na OPET, atualmente estou morando em Curitiba - PR

Publicado em fevereiro 2, 2012, em Zend Framework e marcado como , , , , . Adicione o link aos favoritos. Deixe um comentário.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 159 other followers