Início > Joomla CMS, Software Livre > Integrando o Doctrine ao Joomla 1.5

Integrando o Doctrine ao Joomla 1.5

6 de setembro de 2009 Deixe um comentário Go to comments

Sem muito papo:
Desenvolvendo um componente em Joomla usando a interface ORM do Doctrine ( E não usar o JTable padrão )
1. Coloque o Doctrine nas PASTAS de seu componente
2. Configure a conexão
3. Gere os Models
4. Configure o AutoLoading dos Models e das Classes do Doctrine
5. Problemas no Joomla

Baixe e instale o Doctrine no seu componente:

Estrutura de Pastas do Doctrine para Joomla

Estrutura de Pastas do Doctrine para Joomla

Configure a conexão:

Para configurar a conexão precisamos das informações do banco e de usuários e senha ( contidas no arquivo configuration.php no path do joomla ):

$dbName = JFactory::getApplication()->getCfg( ‘db’ );
$dbHost = JFactory::getApplication()->getCfg( ”host );
$dbUser = JFactory::getApplication()->getCfg( ‘user’ );
$dbPass = JFactory::getApplication()->getCfg( ‘password’ );
require_once( JPATH_COMPONENT_ADMINISTRATOR . DS . ‘_lib’ . DS . ‘doctrine’ . DS . ‘Doctrine.php’ );
$manager = Doctrine_Manager::getInstance();

$dsn = “mysql:dbname={$dbName};host={$dbHost}”;
$dbh = new PDO( $dsn, $dbUser, $dbPass );
Doctrine_Manager::connection( $dbh );

Gere os Models:

Doctrine::generateModelsFromDb( JPATH_COMPONENT_ADMINISTRATOR . DS . ‘models’  );

Configure o Autoloading dos Models e das Classes do Doctrine:

Configurar o autoloading do Doctrine no joomla só não é uma tarefa trivial devido ao joomla já usar esse recurso em seu framework ( veja o arquivo  /libraries/joomla/loader.php:158 )

Então o que se tem a fazer é carregar o Autoloading do Doctrine mas ao mesmo tempo manter o Autoloading do Joomla…
Pra isso sobrecarreguei o método de autoloading do Doctrine:

spl_autoload_register( array( ‘My_Router’, ‘autoload’ ) );
class My_Router {

function autoload(  $className )
{

Doctrine::autoload( $className );
JLoader::load($className)
return true;

}

}

Tudo que fiz foi executar o autoload tanto do Doctrine quanto do Joomla… Assim não vamos ter problemas para carregar as classes dos dois frameworks…

Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);

Doctrine::loadModels( JPATH_COMPONENT_ADMINISTRATOR. DS . ‘models’ );

Lembre-se de remover o método “loadModelsFromDb” depois de gerar os models, pra  não ter de fazer a mesma coisa sempre…

Pra carregar os models do Doctrine basta instanciar as classes…

Problemas no Joomla:

Prefixos das tabelas

Esse problema pode ser resolvido se ao invés de gerar os modelos direto do Banco você faça com modelos em YML e na instalação de seu componente você mude os nomes das tabelas ( editando o arquivo .yml ) para o  correto.
Uso uma ferramenta bem interessante para gerar os modelos .yml. Gero o esquema do banco no MySQL-Workbench e rodo o plugin http://code.google.com/p/mysql-workbench-doctrine-plugin/

O Doctrine adiciona muita funcionalidade ao seu componente, aproveite!

Até logo!

  1. Bruno.N
    3 de dezembro de 2009 às 18:01

    Interessante.

  1. No trackbacks yet.

Deixe uma resposta

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

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: