Arquivo de Aug/2009

26 AugZend Framework – Criando Action Helpers

Conforme eu havia prometido aqui, hoje eu estarei dando continuidade aos meus tutoriais sobre helpers. O action helper, assim como view helper, serve para melhorar o reaproveitamento de códigos e manter seus controllers o mais limpo possível.

Na empresa aonde trabalho, o primeiro problema que apareceu no uso do ZF foi a criação constante de formulários. Esse processo nos forçava a criar vários “getForms“, muitos deles com o mesmo código. Vamos generalizar esse tipo de código, criar um helper e ser mais feliz!


Configurando

Mais uma vez, estarei levando em consideração que você está utilizando o padrão MVC com plugins do ZF (padrão que o zend studio cria). Já recebi vários emails do tipo “Como configurar o ZendFramework” ou então “Como criar a primeira aplicação com o ZF”. Prometo postar algo sobre isso em breve. Vamos lá:

Adicione a seguinte linha no seu plugin “Initializer.php” (ou em seu bootstrap, caso esteja configurado de outra forma)

Zend_Controller_Action_HelperBroker::addPath($CAMINHO_FISICO . '/library/helpers/', 'Zend_Controller_Action_Helper');

Tenha em mente que a váriavel $CAMINHO_FISICO deve conter o caminho da sua aplicação no servidor.

Com essa linha configurada corretamente o ZF já vai conseguir “enxergar” o seu helper.


Criando o Action Helper

<?php
/**
* Cria o objeto do form indicado.
* @author Nivaldo Arruda - nivaldo@gmail.com
* @version 1.0
*/

class Zend_Controller_Action_Helper_Formulario extends Zend_Controller_Action_Helper_Abstract
{

/**
* instancia o formulario.
* Exemplo para o parametro: $opcoes
* $opcoes['id'] = Para salvar uma edição de dados
* $opcoes['url'] = url da action
*
* @param string $formulario
* @param Array $opcoes
* @return Object
*/
public function criar($formulario, array $opcoes=null)
{
//Caso o seu autoload esteja habilitado, essa linha pode ser comentada
require_once $formulario.'.php';

$id = $opcoes['id'];

/**
* Gera o parametro "id" caso o mesmo seja informado (para URL de editar);
*/
if($id)
$id = "/id/".$id;

/**
* Instancia o formulario informado
*/
$form = new $formulario(array(
'action' => $opcoes['url'].$id,
'method' => 'post',
'id' => $formulario,
), $opcoes);

return $form;
}

}

Perceberam que é uma classe bastante simples não? Mas para um sistema comum, com muitos cadastros, ela é essencial e vai te economizar bastante linhas de códigos =)


Utilizando
Para chamar essa classe é simples. Adicione a seguinte linha no seu controller:

$opcoes['url'] = '/usuarios/salvar';
$form = $this->_helper->Formulario->criar('usuarioForm', $opcoes);

Esse código irá instanciar um objeto do tipo “usuarioForm” dentro da váriavel $form. Só lembre-se que o nome da classe do seu form deve ser “usuarioForm” e o arquivo dela: usuarioForm.php.


Código bem simples, para exemplificar os actions helpers, que serão um grande aliado seu do dia a dia.


^^

11 AugZend Framework – Criando um View helper

O blog está um pouco parado, então irei reanima-lo um pouco. Vou continuar seguindo a linha MVC do ZF e hoje vou abordar um dos principais problemas que essa implementação pode trazer: Views sujas com códigos.

O conceito de MVC nasceu justamente para manter as views (interface com o usuário) completamente separadas dos códigos e das regras de negócio. Com o ZF ela já fica um pouco poluída (para quem estava acostumado com smarty, o primeiro contato é um desespero só). Então programadores, vamos tentar manter essa distinção e vamos fazer mais uso dos “Views helpers”.

O que são os Views Helpers?

Views Helpers são classes que fazem o papel de abstrair os códigos que possivelmente ficarão na view. Seja um foreach para preencher dados de tabela ou de combobox, seja para formatação de nomes/datas ou qualquer outro fim. Fora tirar todo esse código sujo da sua view, você ainda pode reaproveita-las para outras telas.

Criando o Helper

No padrão MVC do zend, existe uma pasta chamado views, dentro de views existe mais 2 pastas (scripts e helpers). Crie seu arquivo dentro da pasta helpers, com o nome do seu helper. Em nosso exemplo: Data.php

Zend Framework - MVC - Diretorios

Zend Framework - MVC - Diretorios

Codificando

<?php
/*
 * Helper que retorna o uma data em vários formatos diferentes.
 * ex: echo $this->Data('2009-18-11')->extenso;
 * ex: echo $this->Data('2009-18-11')->pt_br;
 * ex: echo $this->Data('2009-18-11 09:11:00')->hora;
 * @author Nivaldo Arruda - nivaldo@gmail.com
 * @see www.nivaldoarruda.com.br
 * @version 1.0
*/
class Zend_View_Helper_Data extends Zend_View_Helper_Abstract
{
    public $extenso;
    public $pt_br;
    public $hora;

    public function data($data)
    {
        list($ano, $mes, $dia) = explode("-", substr($data, 0, 10));

        $this->extenso = $this->diasemana("$ano-$mes-$dia");
        $this->pt_br = "$dia/$mes/$ano";

        if(strlen($data)>10){
            list($hora, $minuto, $segundo) = explode(":", substr($data, 11, 8));
            $this->hora = "$hora:$minuto:$segundo";
        }

        return $this;
    }

    /**
     * Retorna o dia da semana, por extenso e em português, correspondente
     * a data informada por parametro (no padrão aaaa-mm-dd).
     *
     * @param Date $data
     * @return String
     */
    public function diasemana($data){
        list($ano, $mes, $dia) = explode("-", $data);

        $diasemana = date("w", mktime(0, 0, 0, $mes, $dia, $ano));

        switch($diasemana) {
            case 0: $diasemana = "Domingo";
                    break;
            case 1: $diasemana = "Segunda-Feira";
                    break;
            case 2: $diasemana = "Terça-Feira";
                    break;
            case 3: $diasemana = "Quarta-Feira";
                    break;
            case 4: $diasemana = "Quinta-Feira";
                    break;
            case 5: $diasemana = "Sexta-Feira";
                    break;
            case 6: $diasemana = "Sábado";
                    break;
        }

        return $diasemana;

    }
}
?>

Entendendo

Perceba a linha da assinatura da classe:

class Zend_View_Helper_Data extends Zend_View_Helper_Abstract

O nome do arquivo “Data” Deve ser igual ao sulfixo do nome da classe (tome sempre cuidado com o case-sensitive).

O nome do método principal, também deve ser igual ao do arquivo, mas esse em caixa-baixa (minusculo):  “data”

public function data($data)

Para rodar esse helper, em uma de suas views, execute o código que está comentado no cabeçalho da classe:

Exemplo de uso

echo $this->Data('2009-18-11')->extenso;
echo $this->Data('2009-18-11')->pt_br;
echo $this->Data('2009-18-11 09:11:00')->hora;

Agora use a imaginação e mantenha suas Views limpas!

Próximo passo: Action Helpers!

^^

01 AugZend Framework 1.9.0

Baixe o seu em: http://framework.zend.com/download/latest

Fora os mais de 700 bugs corrigidos desde a versão 1.8.0, novas funções foram adicionada:

  • Zend_Queue and Zend_Service_Amazon_Sqs, which provide the ability to use local and remote messaging and queue services for offloading asynchronous processes. (Contributed by Justin Plock and Daniel Lo)
  • Zend_Queue_Adapter_PlatformJobQueue, a Zend_Queue adapter for Zend Platform’s Job Queue. (Contributed by Zend Technologies)
  • Zend_Rest_Route, Zend_Rest_Controller, and Zend_Controller_Plugin_PutHandler, which aid in providing RESTful resources via the MVC layer. (Contributed by Luke Crouch, SourceForge)
  • Zend_Feed_Reader, which provides a common API to RSS and Atom feeds, as well as extensions to each format, caching, and a slew of other functionality. (Contributed by Pádraic Brady and Jurrien Stutterheim)
  • Zend_Db_Adapter_Sqlsrv, a Zend_Db adapter for Microsoft’s SQL Server driver for PHP. (Contributed by Juozas Kaziukenas and Rob Allen)
  • Zend_Db_Table updates to allow using Zend_Db_Table as a concrete class by passing it one or more table definitions via the constructor. (Contributed by Ralph Schindler)
  • Zend_Test_PHPUnit_Db, which provides Zend_Db support for PHPUnit’s DBUnit support, allowing developers to do functional and integration testing against databases using data fixtures. (Contributed by Benjamin Eberlei)
  • Annotation processing support for Zend_Pdf, as well as performance improvements. (Contributed by Alexander Veremyev)
  • Zend_Dojo custom build layer support. (Contributed by Matthew Weier O’Phinney)
  • Dojo upgraded to 1.3.2.
  • Numerous Zend_Ldap improvements, including full support for CRUD operations, search, and manipulating tree structures. (Contributed by Stefan Gehrig)
  • Zend_Log_Writer_Syslog, a Zend_Log writer for writing to your system log. (Contributed by Thomas Gelf)
  • Zend_View_Helper_BaseUrl, a view helper for returning the current base URL to your application, as well as for constructing URLs to public resources. (Contributed by Robin Skoglund and Geoffrey Tran)
  • Zend_Date now has support for the DateTime extension. (Contributed by Thomas Weidner)
  • Zend_Locale has been upgraded to CLDR 1.7. (Contributed by Thomas Weidner)
  • Zend_Translate now has plurals support for the Gettext, Csv, and Array adapters. (Contributed by Thomas Weidner)
  • PHP 5.3 compatibility, including support for new features in the mysqli extension. All components are fully tested on both PHP 5.2.4 and above, as well as PHP 5.3.0.

Ainda não tive tempo de testar essa funcionalidades, mas pretendo movimentar mais esse blog em breve.

^^

SEO Powered by Platinum SEO from Techblissonline