Vamos agora configurar o DOCTRINE para conectar com o nosso
banco de dados.
Antes de mais nada, vamos instalar o Eclipse PDT para poder facilitar a nossa vida. O Eclipse PDT é uma IDE modificada para ajudar a compilar nosso código com a API do PHP.
No menu do Eclipse escolha: New > PHP Project from
Existing Directory
Informe um nome para o projeto e o local onde baixamos o
esqueleto da aplicação e instalamos as dependências no post anterior com o COMPOSER.
Se quiseres, podes copiar a pasta
ZendSkeletonApplication mantendo-a intacta e usando-a como base para futuros
projetos.
O
Eclipse abrirá o projeto com exibindo o arquivo composer.json. Nas abas
inferiores (General e composer.json), clique em “composer.json” para exibir o
código do arquivo.
Vamos incluir a dependência do DOCTRINE e atualizar o
projeto. Observe atentamente as
mudanças. O código deverá ficar assim:
Vamos salvar e vamos abrir o prompt de comando, entrar no
diretório do projeto e executar o comando COMPOSER UPDATE.
O resultado deverá ser igual a esse:
C:\Users\Wagner>cd
\xampp\htdocs\temp\ZendSkeletonApplication
C:\xampp\htdocs\temp\ZendSkeletonApplication>composer
update
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Removing
zendframework/zendxml (1.0.0)
- Installing
zendframework/zendxml (1.0.1)
Loading from cache
- Removing
zendframework/zend-stdlib (2.5.1)
- Installing
zendframework/zend-stdlib (2.5.2)
Loading from cache
- Removing
zendframework/zend-eventmanager (2.5.1)
- Installing
zendframework/zend-eventmanager (2.5.2)
Loading from cache
- Removing
zendframework/zend-code (2.5.1)
- Installing
zendframework/zend-code (2.5.2)
Loading from cache
- Removing
zendframework/zend-validator (2.5.1)
- Installing
zendframework/zend-validator (2.5.3)
Downloading: 100%
- Removing
zendframework/zend-http (2.5.1)
- Installing
zendframework/zend-http (2.5.3)
Downloading: 100%
- Removing
zendframework/zend-view (2.5.1)
- Installing
zendframework/zend-view (2.5.2)
Loading from cache
- Removing
zendframework/zend-json (2.5.1)
- Installing
zendframework/zend-json (2.5.2)
Loading from cache
- Removing
zendframework/zend-inputfilter (2.5.1)
- Installing zendframework/zend-inputfilter
(2.5.5)
Downloading: 100%
- Removing
zendframework/zend-form (2.5.1)
- Installing
zendframework/zend-form (2.5.3)
Downloading: 100%
- Removing
zendframework/zend-mvc (2.5.1)
- Installing
zendframework/zend-mvc (2.5.3)
Downloading: 100%
- Removing
symfony/yaml (v2.7.0)
- Installing
symfony/yaml (v2.7.5)
Downloading: 100%
- Removing
sebastian/version (1.0.5)
- Installing
sebastian/version (1.0.6)
Loading from cache
- Removing
sebastian/recursion-context (1.0.0)
- Installing
sebastian/recursion-context (1.0.1)
Loading from cache
- Removing
sebastian/exporter (1.2.0)
- Installing
sebastian/exporter (1.2.1)
Loading from cache
- Removing
sebastian/environment (1.2.2)
- Installing
sebastian/environment (1.3.2)
Loading from cache
- Removing
sebastian/comparator (1.1.1)
- Installing
sebastian/comparator (1.2.0)
Loading from cache
- Removing
phpunit/php-text-template (1.2.0)
- Installing
phpunit/php-text-template (1.2.1)
Loading from cache
- Removing
doctrine/instantiator (1.0.4)
- Installing
doctrine/instantiator (1.0.5)
Loading from cache
- Removing
phpunit/phpunit-mock-objects (2.3.3)
- Installing
phpunit/phpunit-mock-objects (2.3.7)
Loading from cache
- Removing
phpunit/php-timer (1.0.5)
- Installing
phpunit/php-timer (1.0.7)
Loading from cache
- Removing
phpunit/php-file-iterator (1.4.0)
- Installing
phpunit/php-file-iterator (1.4.1)
Loading from cache
- Removing
phpunit/php-token-stream (1.4.1)
- Installing
phpunit/php-token-stream (1.4.8)
Downloading: 100%
- Removing
phpunit/php-code-coverage (2.1.5)
- Installing
phpunit/php-code-coverage (2.2.3)
Downloading: 100%
- Removing phpspec/prophecy
(v1.4.1)
- Installing
phpspec/prophecy (v1.5.0)
Loading from cache
- Removing
phpunit/phpunit (4.7.2)
- Installing
phpunit/phpunit (4.8.9)
Downloading: 100%
- Removing
zendframework/zend-session (2.5.1)
- Installing
zendframework/zend-session (2.5.2)
Loading from cache
- Removing
zendframework/zend-modulemanager (2.5.1)
- Installing
zendframework/zend-modulemanager (2.5.3)
Downloading: 100%
- Removing
zendframework/zend-mail (2.5.1)
- Installing
zendframework/zend-mail (2.5.2)
Downloading: 100%
- Removing
zendframework/zend-log (2.5.1)
- Installing
zendframework/zend-log (2.5.2)
Loading from cache
- Removing
zendframework/zend-i18n-resources (2.5.1)
- Installing zendframework/zend-i18n-resources
(2.5.2)
Loading from cache
- Removing
zendframework/zend-feed (2.5.1)
- Installing
zendframework/zend-feed (2.5.2)
Loading from cache
- Removing
zendframework/zend-db (2.5.1)
- Installing
zendframework/zend-db (2.5.2)
Downloading: 100%
- Removing
zendframework/zend-cache (2.5.1)
- Installing
zendframework/zend-cache (2.5.3)
Downloading: 100%
- Removing
zendframework/zend-barcode (2.5.1)
- Installing
zendframework/zend-barcode (2.5.2)
Loading from cache
- Removing
zendframework/zend-authentication (2.5.1)
- Installing
zendframework/zend-authentication (2.5.2)
Loading from cache
- Removing
zendframework/zendframework (2.5.1)
- Installing
zendframework/zendframework (2.5.2)
Loading from cache
- Installing
psr/http-message (1.0)
Loading from cache
- Installing
zendframework/zend-diactoros (1.1.3)
Loading from cache
- Installing
symfony/console (v2.7.5)
Downloading: 100%
- Installing
doctrine/cache (v1.4.2)
Downloading: 100%
- Installing
doctrine/lexer (v1.0.1)
Loading from cache
- Installing
doctrine/annotations (v1.2.7)
Downloading: 100%
- Installing
doctrine/collections (v1.3.0)
Loading from cache
- Installing
doctrine/inflector (v1.0.1)
Loading from cache
- Installing
doctrine/common (v2.5.1)
Downloading: 100%
- Installing
doctrine/dbal (v2.5.2)
Downloading: 100%
- Installing
doctrine/orm (v2.5.1)
Downloading: 100%
symfony/console suggests installing symfony/event-dispatcher
()
symfony/console suggests installing symfony/process ()
symfony/console suggests installing psr/log (For using the
console logger)
Writing lock file
Generating autoload files
C:\xampp\htdocs\temp\ZendSkeletonApplication>
Pronto!
As dependências estão instaladas e agora só precisamos configurar. Antes de
mais nada vamos abrir o navegador e acessar o projeto para ver se está tudo
bem.
O Framework Zend é baseado em módulos. Ele vem, a princípio,
com um módulo básico chamado Application. Podemos usar esse módulo como base para
a criação de outros módulos, ou seja, vamos copiar essa pasta inteira e colar
no mesmo diretório, no caso module, com outro nome. Por exemplos, se tivermos
em nossa aplicação um controle de usuários (cadastro, alteração, exclusão e
leitura) podemos chamar esse módulo de USUARIO.
Clique com o botão direito no módulo Application
e escolha COPY, ou pelo teclado apertando CTRL+C, clique no pacote MODULE (logo
acima do módulo Application) e cole. Teremos um conflito de nomes. Digite
Usuario e confirme.
Vamos
registrar esse módulo que acabamos de criar para que ele possa ser enxergado
pela nossa aplicação? Abra o arquivo \config\application.config.php e inclua o módulo que criamos. O arquivo ficará assim:
Quando registramos um módulo, o framework busca pelo arquivo
Module.php dentro de cada módulo aqui descrito para poder carregar a
configuração específica de cada módulo.
Já sabemos que o arquivo Module.php, dentro de cada módulo, descreve
a configuração do respectivo módulo no carregamento da aplicação. Podemos, por
exemplo, não querer usar o Doctrine em um dado módulo.
Vamos abrir esse arquivo, dentro do módulo que acabamos de
criar, e informar que queremos usar o Doctrine. O Doctrine é responsável por
fazer a abstração com o nosso banco de dados.
Vamos fazer os imports, definir uma constante,
ajustar o método onBootstrap e criar mais 2 métodos. Ajustaremos para que fique
da seguinte forma:
Vamos alterar o método getAutoloaderConfig() para que fique
assim e vamos criar esses dois métodos:
initializeDoctrine2($e)
getDoctrine2Config($e)
Segue o código do arquivo na íntegra:
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Usuario;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
use Zend\I18n\Translator\Translator;
use Zend\Validator\AbstractValidator;
class Module
{
const DOCTRINE_BASE_PATH = '/../../vendor/doctrine/orm/lib/Doctrine';
public function onBootstrap(MvcEvent $e)
{
$e->getApplication()->getServiceManager()->get('translator');
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$translationPath = realpath(__DIR__ . '/../../vendor/zendframework/zendframework/resources/languages');
$translator = new Translator();
$translator->addTranslationFile('phpArray', $translationPath . '/pt_BR/Zend_Validate.php', 'default', 'pt_BR');
AbstractValidator::setDefaultTranslator(new \Zend\Mvc\I18n\Translator($translator));
$GLOBALS['sm'] = $e->getApplication()->getServiceManager();
$this->initializeDoctrine2($e);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
'Doctrine\Common' => realpath(__DIR__ . self::DOCTRINE_BASE_PATH . '/Common'),
'Doctrine\DBAL' => realpath(__DIR__ . self::DOCTRINE_BASE_PATH . '/DBAL'),
'Doctrine\ORM' => realpath(__DIR__ . self::DOCTRINE_BASE_PATH . '/ORM')
),
),
);
}
public function initializeDoctrine2($e) {
$conn = $this->getDoctrine2Config($e);
$config = new Configuration();
$cache = new ArrayCache();
$config->setMetadataCacheImpl($cache);
$annotationPath = realpath(__DIR__ . self::DOCTRINE_BASE_PATH . '/ORM/Mapping/Driver/DoctrineAnnotations.php');
AnnotationRegistry::registerFile($annotationPath);
$driver = new AnnotationDriver(
new AnnotationReader(),
array(__DIR__ . '/src/Cadastro/Model')
);
$config->setMetadataDriverImpl($driver);
$config->setProxyDir(__DIR__ . '/src/Cadastro/Proxy');
$config->setProxyNamespace('Cadastro\Proxy');
$entityManager = EntityManager::create($conn, $config);
$GLOBALS['entityManager'] = $entityManager;
}
private function getDoctrine2Config($e) {
$config = $e->getApplication()->getConfig();
return $config['doctrine_config'];
}
}
Fim do arquivo
Observe a linha 79 acima. Está vendo a chave doctrine_config? A variável $config
contém os dados que são globais em toda a aplicação. Vamos criar esse identificador
no arquivo global.php, que fica na raiz da aplicação, com as configurações de
conexão com o banco.
Abra o arquivo global.php que está na pasta
config\autoload\global.php.
Edite para que fique assim:
Ou seja: Temos aqui a configuração do nosso futuro banco de
dados chamado “teste” e o nome de usuário e senha para conexão com o MySql.
Pronto! Nossa aplicação está com o Doctrine configurado e
pronto para conexão com o banco de dados.