Integração do EzComponents com o Zend Framework.

Introdução

Recentemente em meu trabalho foi necessário gerar alguns gráficos e então fomos estudar o que havia disponível no mercado o que nos atenderia melhor.
Encontramos o ezGraph, componente do excelente ezComponents, que atendia a todas as nossas necessidades, além de ser open-source e possuir uma licença bem amigável.

O único problema que encontramos foi que o ezComponents utiliza uma estrutura de autoloading própria e o Zend Framework também possui uma estrutura similar que é opcional, mas estávamos utilizando, que é o autoload do Zend_Loader.

O intuito deste post é mostrar como integrar o ezComponents à estrutua de desenvolvimento baseada em Zend Framework mantendo os dois mecanimsmos de autoloading funcionando em paralelo.

Mãos à obra

Para fazer esta integração, precisamos estender a classe Zend_Loader e sobre-escrever alguns métodos.
Eu normalmente crio um diretório lib em minha aplicação e posteriormente um sub-diretório onde eu coloco minhas classes derivadas das classes do Zend Framework.
Neste post, vamos entender que temos uma pasta lib devidamente incluída no include_path do PHP e as nossas classes ficam em um diretório chamado Blog. Ok?

Tendo a estrutura acima criada, vamos criar um arquivo PHP chamado Loader.php dentro do diretório Blog. O conteúdo dele deverá ficar conforme exemplo abaixo:

<?php
include_once 'Zend/Loader.php';

class Blog_Loader extends Zend_Loader
{
public static function loadClass ($class, $dirs = null)
{
parent::loadClass($class);
}

public static function autoload ($class)
{
try {
if ('ezc' == substr($class, 0, 3)) {
include_once 'Base/src/base.php';
ezcBase::autoload($class);
} else {
self::loadClass($class);
}
return $class;
} catch (Exception $e) {
return false;
}
}
}

Como podemos ver, reescrevemos o método autoload, que é o método do Zend Framework que se encarrega de realizar o autoload das classes quando necessário.
Neste método, nós verificamos a cada interceptação, se o nome da classe começa com ezc (que é o padrão adotado pelo ezComponents), se começar com ezc, o método estático autoload da classe ezcBase é invocado informando o nome da classe. A partir daí o ezComponents se encarrega de importar suas classes.

Caso não seja uma classe do ezComponents, o método loadClass da classe Zend_Loader é invocado e o Zend Framework faz o resto.
Simples não?

Para usar, no bootstraper é necessário informar que iremos usar esta classe e para fazer isso é bem simples:

<?php

// Início do seu bootstraper

// Carregando o Zend_Loader
include_once 'Blog/Loader.php';
Zend_Loader::registerAutoload('Blog_Loader');

// Final do seu bootstrapper

Agora já era, você não vai mais precisar lembrar que precisa fazer includes.

Considerações finais

Tanto o Zend Framework quanto o ezComponents possuem uma empresa que os mantém, possuem uma documentação bem feita e completa em seus respectivos sites, então o uso em conjunto dessas ferramentas podem tornar o nosso dia-a-dia mais fácil e nossos softwares mais poderosos (vamos conquistar o mundo :-) ) porque aí nos focamos mais nos nossos negócios deixando a abstração da nossa estrutura de desenvolvimento a cargo dessas ferramentas.

Existem controvérsias a respeito de se usar ou não o autoload e aí você que é responsável pela aplicação deverá colocar os pró e contras de se usar autoloading em uma balança e decidir se vale a pena ou não.

O Zend Framework pode ser encontrado em: http://framework.zend.com e o ezComponents em: http://www.ezcomponents.org/

Espero que este dica seja útil pra você.
Um abraço.

Tags: ,

Leave a Reply