Olá pessoal, vou demonstrar como configurei o Doctrine 2 (ótimo de framework ORM) com o Zend Framework.
O meu ambiente de desenvolvimento está com o PHP 5.3, pois é requisito necessário para o ZF e para o Doctrine 2.
Para este tutorial, irei partir do ponto quando já se tem conhecimento da estrutura dos frameworks, mas irei ilustrar como deverá ficar a estrutura do projeto, e deve ser a seguinte:
Depois de ver a estrutura do projeto, você verificou que a pasta com o framework Doctrine está contida dentro de library, certo?!
Ok, vamos a configuração....
Como demonstrado na estrutura acima, crie a pasta Resouce em: zend_doctrine/library/ , e dentro dela crie o arquivo Doctrine.php, com o seguinte conteúdo:
Arquivo: zend_doctrine/library/Resource/Doctrine.php
- class Resource_Doctrine extends Zend_Application_Resource_ResourceAbstract
- {
protected $_options = array(
- 'connection' => array(
- 'driver' => 'pdo_mysql',
- 'host' => 'localhost',
- 'dbname' => 'banco',
- 'user' => 'seuusuario',
- 'password' => 'suasenha'),
- 'modelDir' => '/models/Entities',
- 'proxyDir' => '/proxies',
- 'proxyNamespace' => 'Proxies',
- 'autoGenerateProxyClasses' => true
- );
public function init()
- {
- $options = $this->getOptions();
- $config = new \Doctrine\ORM\Configuration;
- $cache = new \Doctrine\Common\Cache\ArrayCache;
- $driverImpl = $config->newDefaultAnnotationDriver($options['modelDir']);
- $config->setMetadataCacheImpl($cache);
- $config->setQueryCacheImpl($cache);
- $config->setProxyDir($options['proxyDir']);
- $config->setProxyNamespace($options['proxyNamespace']);
- $config->setAutoGenerateProxyClasses($options['autoGenerateProxyClasses']);
- $config->setMetadataDriverImpl($driverImpl);
- $em = \Doctrine\ORM\EntityManager::create($options['connection'], $config);
- Zend_Registry::set('doctrine', $em);
- return $em;
- }
- }
Vamos entender o que este arquivo irá fazer....
Primeiramente, ele defini as credenciais de acesso para o banco de dados, depois, o diretório onde estarão as classes de entidades, e também o namespace para as classes Proxy que serão geradas automaticamente. Com esses dados o doctrine poderá ser inicializado, e é exatamente isso que é feito no método init().
No final deste método é realizada a chamada a classe de registro do Zend, que é a Zend_Registry, para que a variável gerenciadora de entidade seja registrada na aplicação, ficando assim disponível para usos futuros.
Agora teremos que adicionar algumas linhas ao arquivo de configuração da aplicação, que é o: zend_doctrine/application/config/aplication.ini.
No final do item: [production], adicione as seguintes linhas
pluginPaths.Resource = "Resource"
resources.doctrine.modelDir = APPLICATION_PATH "/Models"
resources.doctrine.proxyDir = APPLICATION_PATH "/Proxies"
autoloaderNamespaces[] = "Doctrine"
autoloaderNamespaces[] = "Resource"
Com essas configurações o ZF irá encontrar o Doctrine e nossa pasta de inicialização Resource.
Para finalizar, teremos que chamar a inicialização do Doctrine no arquivo zend_doctrine/application/Bootstrap.php
Dentro da classe Bootstrap, crie o seguinte método:
- protected function _initDoctrine(){
- $doctrine = new Resource_Doctrine();
- $doctrine->init();
- }
Este método irá chamar a inicialização que criamos para o Doctrine, que está contida dentro do método init() desta classe Resource_Doctrine.
Após estas configurações, o Doctrine estará disponível na aplicação da seguinte maneira:
- $registry = Zend_Registry::getInstance();
- $entityManager = $registry->get('doctrine');
No meu caso utilizei uma estrutura para reutilizar esta chamada nos meus DAOs, mas isso pode ser feito de diversas maneiras e também vária de acordo com a utilização, mas isso fica para um próximo post.
Valeu pessoal, por enquanto é só e até a próxima.
