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.