Carlos Gustavo (The Froskie) Internet, web, www…

29set/090

Zend Framework – Extendendo classes

O Zend Framework é cheio de recursos (na maior parte das vezes, sobra), mas não quer dizer que estes sejam 100% ajustados a nossa necessidade. Quando nós olhamos pra fora (outros frameworks, linguagens), achamos coisas que gostaríamos que houvessem lá, mas, por enquanto, não existem. Solução: extendemos as classes!

Uma defesa clássica sobre extender classe é: nunca mexa no core! Claro! Você não vai sujeitar algo com 1 zilhão de commits e equipes desenvolvedoras as suas mãos falhas e exaltadas (nossa, que drama). A classe mais extendida, por ser a mais usada, é a classe do modelo: Zend_Db_Table. Quem já mexeu com Rails ou Cake sabe que faltam triggers de inserção ou validação, entre outras coisas.

Lá vem as pedras dizendo "já que tem que fazer, por que não migra logo pro outro?". Bom, vou ser rápido e responder que não vou discutir sobre isso.

Um exemplo de extensão e adição de triggers:

class Frk_Db_Table extends Zend_Db_Table {
 
    // dados da tabela
    protected $_data;
 
    /**
     * insere os dados validando os filtros
     * @param $data dados a serem inseridos na tabela
     * @return Integer Chave primaria da linha inserida
     */
    public function insert($data) {
        try {
            $this->_data = $data;
 
            // valida filtros de eventos anteriores
            if (method_exists($this,'before')) {
                $this->before();
            }
            if (method_exists($this,'beforeInsert')) {
                $this->beforeInsert();
            }
 
            // insere os dados e retorna a OK
            return parent::insert($this->_data);
 
        } catch (Exception $e){
            // trata o erro
            return FALSE;
	}
    }
}

Neste exemplo o método insert foi extendido para disparar dois triggers, befor e beforeinsert. Tomei esses dois exemplos vindo de outros frameworks. Muitas vezes são úteis. Segue um exemplo de implementação.

class Usuario extends Frk_Db_Table {
    protected $_name = 'usuarios';
 
    private function beforeInsert(){
        $this->_data['adicionado_em'] = date("Y-m-d");
    }
}

Sempre que for utilizado o método insert, a classe usuário adiciona o campo adicionado_em. É uma boa maneira de se economizar código, especialmente nas views, neste caso. Eu, particularmente, também sempre extendo a classe Zend_Controller_Action, com métodos que auxiliam durante os requests.

Categorias: PHP Sem Comentários
26set/090

Zend_Date e MySQL Timestamp

Precisava colocar um campo daqueles clássicos "atualizado em", em Timestamp do MySQL, num projeto em ZF.

Voilá:

...
$now = new Zend_Date();
$info['update_at'] = $now->get(Zend_Date::W3C);
...
Categorias: PHP Sem Comentários
24mar/082

PEAR Spreadsheet Writer

De fato quando precisei gerar um relatório em Excel, um dos packages da PEAR que cuida do assunto ajuda pacas.

Um exemplo bem simples do uso:

// Biblioteca da PEAR
require_once "Spreadsheet/Excel/Writer.php";
 
// Cria uma instancia
$xls = new Spreadsheet_Excel_Writer();
 
// Envia o cabecalho do arquivo
$xls->send("test.xls");
 
// Adiciona uma planilha
$sheet = $xls->addWorksheet('Contador');
 
// Escreve algumas coisas
for ( $i=0;$i < 11;$i++){
   $sheet->write($i,0,$i);
}
 
// Finaliza e envia para o browser
$xls->close();

Usar a PEAR pra tudo realmente eu não curto, mas em casos como este realmente ajuda.

Categorias: PHP 2 Comentários
13mar/080

PHP Editor (update)

Nops, definitivamente o PhpEdit tem alguns pontos desagradáveis, como diferenciar o highlight code para dentro ou fora da string. Ruim pacas.

Ainda bem que o PDT não sai desta máquina nem a pau. Eu só preciso de mais memória RAM. ;)

12mar/080

PHP Editor

Vou te falar, isto é uma nóia. Editor de PHP é igual time, não se discute, mas falar que bloco de notas resolve também é sacanagem.

Quando você já está com o projeto grande, nada como um autocomplete das suas próprias classes. Eu comecei claro pelo Dreamweaver, mirim, nem sabia programar, era tudo no design mode. Aí mudei pro Zend Studio 5, já era outros quinhentos, mas como quase tudo feito em Java, pesado pacas e dava um monte de pau quando tinha que trabalhar arquivos ISO e UTF.

Depois testei o Eclipse PDT, melhor com certeza até hoje, porém é pesado e o debug com o XDebug dele deixa a desejar. Fui testar o Zend Studio 6 (for Eclipse), todo integradão e tal. Foi só clicar no botão de debug que o programa simplesmente parou de funcionar.

Agora estou testando o PhpEdit. Sei lá, daqui a pouco eu deixo só o EditPad e lasque-se o resto...

P.S.: Só pra constar, para AS ninguém bate o Flash Develop.