Instalando Zend Framework 2 com ZFTool, FirePhp e Doctrine

Posted on março 9, 2013. Filed under: PHP, Zend Framework | Tags:, , , , , |

Introdução

Neste artigo vamos demonstrar como instalar o esqueleto do Zend Framework 2 junto com os componentes ZFTool, FirePhp e Doctrine. Vou focar mais na instalação dos componentes. Instalar o esqueleto do Zend Framework é simples e pode ser feito através do link citado mais abaixo.

Entendo os componentes

ZFTool é uma ferramenta usada para facilitar a gerencia de projetos do Zend Framework. Pode ser usado para criar/excluir módulos, 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 Zend\Db.

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 o Esqueleto do Zend Framework

Aconselho usar o link abaixo para instalação inicial do zend framework. É uma referência oficial que estará sempre atualizada.
http://zf2.readthedocs.org/en/latest/user-guide/skeleton-application.html

Instalando e usando o ZFTool

Instalar o ZFTool é bem simples. Basta entrar no diretório raiz da sua aplicação do Zend Framework e executar:

$ php composer.phar require zendframework/zftool:dev-master
composer.json has been updated
Loading composer repositories with package information
Updating dependencies
  - Installing zendframework/zftool (dev-master 7bdb1bc)
    Cloning 7bdb1bcec331d995c800287b0dca614b62b701cc

Writing lock file
Generating autoload files

Usando o zftool

Para usar o zftool, copie o arquivo zf.php para a raiz da aplicação do zend framework. Dessa forma:

$ cp vendor/bin/zf.php ./

Algumas funcionalidades do ZFTool:

  • Listando módulos
  • $ ./zf.php modules
    Modules installed:
    Application
    
  • Criando módulos
  • $ ./zf.php create module Admin
    The module Admin has been created
    
    $ ./zf.php modules
    Modules installed:
    Application
    Admin
    
  • Referência completa
  • Mais funcionalidades sobre o ZFTool, acessar:
    https://github.com/zendframework/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
  - Installing firephp/firephp-core (dev-master f60753a)
    Cloning f60753a8dd7817e4da6bc73e0e717387a9a0866a

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 instalar o Doctrine, executar o comando abaixo no diretório raiz da sua aplicação Zend:

$ php composer.phar require doctrine/doctrine-orm-module:dev-master
composer.json has been updated
Loading composer repositories with package information
Updating dependencies
  - Installing doctrine/common (2.3.0)
    Downloading: 100%

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

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

  - Installing doctrine/dbal (2.3.2)
    Downloading: 100%

  - Installing doctrine/orm (2.3.2)
    Downloading: 100%

  - Installing doctrine/doctrine-orm-module (dev-master 8da0dab)
    Cloning 8da0dab03be4f282b97632d54979d6b45d6bf479

doctrine/doctrine-module suggests installing doctrine/data-fixtures (Data Fixtures if you want to generate test data or bootstrap data for your deployments)
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 APP_DIR/config/application.config.php e adicione as linhas responsáveis por registrarem os módulos do Doctrine:

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 APP_DIR/config/autoload. No meu caso, criei o arquivo APP_DIR/config/autoload/doctrine_orm.local.php, parametrizando os dados de acesso ao banco de dados. Veja abaixo, que configurei uma conexão com o postgresql. Com um pouco de ajuste você pode modificar para mysql caso desejado:

<?php
// config/autoload/doctrine_orm.local.php
return array(
    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'driverClass' => 'Doctrine\DBAL\Driver\PDOPgSql\Driver',
                'params' => array(
                    'host'     => 'localhost',
                    'port'     => '5432',
                    'user'     => 'userdatabase',
                    'password' => 'senhadatabase',
                    'dbname'   => 'nomedatabase',
                )
            )
        )
    ),
);

Finalmente para podermos utilizar o Doctrine dentro de nosso módulo do Zend Framework precisamos de alguns ajustes no arquivo module.config.php que fica dentro do diretório config/ do módulo. Em nosso caso, em 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 um pouco.

Com essa configuração o Doctrine vai passar a procurar os arquivos Entity dentro de NomedoModulo/src/NomedoModulo/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 à utilizar o Doctrine junto com o Zend Framework 2.

No nosso caso o caminho do diretório Entity ficaria em module/Application/src/Application/Entity.

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-orm-module": "dev-master"
    }
}

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

Make a Comment

Deixe um comentário

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 )

Foto do Google

Você está comentando utilizando sua conta Google. 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 )

Conectando a %s

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: