Instalando Zend Framework 2 com ZFTool, FirePhp e Doctrine

zf2-logo-mark-100

Introdução

Neste artigo vamos demonstrar como instalar um projeto Zend Framework 2 com os componentes ZFTool, FirePhp e Doctrine.

Entendo os componentes

ZFTool é uma ferramenta usada para facilitar a gerencia de projetos do Zend Framework. Pode ser usado para criar/excluir módulos, controllers, criar novas aplicações do zend framework ou simplesmente instalar o diretório library do zend framework.

O módulo do FirePHP para Zend Framework, permite que você envie informações de log diretamente para a extensão FirePHP do Firefox. Muito útil para debugar sua aplicação ZF2.

O Doctrine fornece diversas bibliotecas com foco em persistência de dados. Seus principais projetos desenvolvidos são um Object Relational Mapper (ORM) e um Database Abstraction Layer. Você pode usar ele junto com o Zend Framework 2. Um alternativa ao ZendDb.

Lembre-se que a instalação de cada um desses componentes é feita de forma independente. Portanto, caso queira instalar apenas 1 ou de 2 desses componentes e não todos, é possível fazer sem preocupações.

Instalando Zend Framework 2 com ZFTool

Os procedimentos detalhados de como instalar o Zend Framework 2 junto com o ZFTool pode ser encontrado no meu outro artigo, clicando abaixo:

Instalando Zend Framework 2 com ZFTool
(O tutorial acima ensina como utilizar as principais funções do ZFTool)

Instalando e usando o FirePHP

Para instalar o FirePHP, basta executar o comando abaixo na raiz do diretório do projeto do zend framework:

# php composer.phar require firephp/firephp-core:dev-master
composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing firephp/firephp-core (dev-master v0.4.0)
    Cloning v0.4.0

Writing lock file
Generating autoload files

Usando o FirePHP

Para utilizar a classe de logger do Firephp, vamos primeiro criar um factory para ela no arquivo Module.php do nosso módulo. O factory deve ser criado dentro da função getServiceConfig().

No caso, estamos trabalhando com o módulo Application:

(Se necessário, caso não exista ainda, criar a função getServiceConfig() dentro de Module.php)

// module/Application/Module.php
public function getServiceConfig() {
	return array(
		'factories' => array(
			'Zend\Log\FirePhp' => function($sm) {
				$writer_firebug = new \Zend\Log\Writer\FirePhp();
				$logger = new \Zend\Log\Logger();
				$logger->addWriter($writer_firebug);
				return $logger;
			},
		),
	);
}

Exemplo de utilização do Firephp no Controller:

// module/Application/src/Application/Controller/IndexController.php
public function indexAction()
{
	$firephp = $this->getServiceLocator()->get('Zend\Log\FirePhp');
	$firephp->info("info log");
	$firephp->warn("warn log");
	$firephp->crit("critical log");

	return new ViewModel();
}

Lembre-se que para funcionar corretamente, você precisa instalar a extensão firephp no seu Mozilla Firefox:
http://www.firephp.org/

Resultado do teste anterior:

ScreenShot082

Mais detalhes, consultar a documentação do ZF:
http://framework.zend.com/manual/2.0/en/modules/zend.log.overview.html#using-built-in-priorities
http://framework.zend.com/manual/2.0/en/modules/zend.log.writers.html

Instalando e usando o Doctrine

Para usar o Doctrine, vamos instalar os pacotes DoctrineModule e DoctrineORMMOdule.

Instalando o DoctrineModule:

# php composer.phar require doctrine/doctrine-module:0.*
composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing doctrine/common (2.3.0)
    Loading from cache

  - Installing symfony/console (v2.3.3)
    Downloading: 100%

  - Installing doctrine/doctrine-module (0.7.2)
    Loading from cache

symfony/console suggests installing symfony/event-dispatcher ()
doctrine/doctrine-module suggests installing doctrine/data-fixtures (Data Fixtures if you want to generate test data or bootstrap data for your deployments)
Writing lock file
Generating autoload files

Instalando o DoctrineORMModule:

# php composer.phar require doctrine/doctrine-orm-module
(Informar 0.* quando questionado sobre o parâmetro version constraint)
Please provide a version constraint for the doctrine/doctrine-orm-module requirement: 0.*
composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing doctrine/dbal (2.3.4)
    Loading from cache

  - Installing doctrine/orm (2.3.4)
    Loading from cache

  - Installing doctrine/doctrine-orm-module (0.7.0)
    Loading from cache

doctrine/orm suggests installing symfony/yaml (If you want to use YAML Metadata Mapping Driver)
doctrine/doctrine-orm-module suggests installing zendframework/zend-developer-tools (zend-developer-tools if you want to profile operations executed by the ORM during development)
doctrine/doctrine-orm-module suggests installing doctrine/migrations (doctrine migrations if you want to keep your schema definitions versioned)
Writing lock file
Generating autoload files

Usando o Doctrine no ZF2

O primeiro passo é registrar os módulos e namespaces do doctrine no zf. Edite o arquivo config/application.config.php e adicione as linhas responsáveis por registrarem os módulos do Doctrine:

// config/application.config.php
return array(
    'modules' => array(
        'Application',
         outros modulos..
        'DoctrineModule',
        'DoctrineORMModule',
        ),
        mais configs...

Depois configure os dados de conexão com o banco de dados que será utilizado pelo Doctrine. Crie um arquivo dentro de config/autoload. No meu caso, criei o arquivo config/autoload/doctrine_orm.local.php, parametrizando os dados de acesso ao banco de dados. Veja abaixo, que configurei uma conexão com o mysql:

<?php
// config/autoload/doctrine_orm.local.php 
return array(
	'doctrine' => array(
		'connection' => array(
			'orm_default' => array(
				'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
				'params' => array(
					'host'     => '127.0.0.1',
					'port'     => '3306',
					'user'     => 'usuario',
					'password' => 'senha',
					'dbname'   => 'banco',
					'charset'  => 'utf8',
				)
			)
		)
	)
);

Para podermos utilizar o Doctrine dentro de algum módulo do Zend Framework, precisamos de alguns ajustes no arquivo module.config.php que fica dentro do diretório config/ do seu módulo. No caso do nosso exemplo, o caminho é module/Application/config. Lembre-se de trocar o Application pelo nome do módulo no qual esta trabalhando.

Insira as linhas destacadas abaixo no arquivo module.config.php:

<?php 
// module/Application/config/module.config.php 
namespace Application; 

return array(   
  'router' => array(
    ...
  ),
  'controllers' => array(
    ...
  ),
  'view_manager' => array(
    ...
  ),
  'doctrine' => array(
    'driver' => array(
      __NAMESPACE__ . '_driver' => array(
        'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
        'cache' => 'array',
        'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
      ),
      'orm_default' => array(
        'drivers' => array(
          __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
        )
      )
    )
  )
);

Veja que foi necessário incluir a linha namespace no começo do arquivo, devido estamos usando a constante __NAMESPACE__ na configuração para o Doctrine. Isso facilita nosso trabalho, deixando o código desta configuração mais dinâmico.

Com essa configuração o Doctrine vai passar a procurar os arquivos Entity dentro de Application/src/Application/Entity. Basta criar o diretório Entity no caminho correto e dentro dele o arquivos que representam as entidades do seu banco de dados. Após essa configuração, você já esta apto à acessar o seu banco de dados pelo Zend Framework 2 através do Doctrine.

Arquivo composer.json final

Após a instalação das 3 bibliotecas, ZFTool, FirePhp e Doctrine, nosso arquivo composer.json do Zend Framework ficou da seguinte forma:
(Destaquei apenas as linhas que foram inseridas devido a instalação das bibliotecas)

{
    "name": "zendframework/skeleton-application",
    "description": "Skeleton Application for ZF2",
    "license": "BSD-3-Clause",
    "keywords": [
        "framework",
        "zf2"
    ],
    "homepage": "http://framework.zend.com/",
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.*",
        "zendframework/zftool": "dev-master",
        "firephp/firephp-core": "dev-master",
        "doctrine/doctrine-module": "0.*",
        "doctrine/doctrine-orm-module": "0.*"

    }
}

Parabéns

Se você chegou até aqui e conseguiu configurar e instalar os módulos desejados na sua aplicação Zend Framework, Parabéns!

Referências

Selecionei alguns links que podem ser úteis referente ao assunto deste artigo:

https://github.com/zendframework/ZFTool
http://samminds.com/2012/07/install-doctrine-2-for-zend-framework-2/
http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/
http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html
http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html
http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html
http://docs.doctrine-project.org/en/2.0.x/reference/query-builder.html

Comments

  1. By Adriano Ricardo

    Reply

    • mm By Douglas V. Pasqua

      Reply

  2. By Gado

    Reply

    • mm By Douglas V. Pasqua

      Reply

Deixe um comentário

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: