Utilizando Zend Framework 2 no modo StandAlone

Posted on julho 4, 2013. Filed under: PHP, Zend Framework | Tags:, , |

Introdução

O Zend Framework 2 fornece uma API extremamente rica, bem elaborada e bem testada. Possui componentes muito úteis para qualquer projeto de desenvolvimento web.

Neste artigo vamos aprender como configurar o Zend Framework 2 de forma StandAlone. Isso significa que podemos usar os componentes do Zend Framework de forma isolada e independente da estrutura MVC fornecida.

Instalando e Configurando o Ambiente

  1. Download do Zend Framework
  2. Acesse o link http://framework.zend.com/downloads/latest#ZF2 e baixe a última versão disponível para o Zend Framework 2, clicando no botão Download e escolhendo o formato desejado (zip para ambientes windows ou tar.gz para ambientes Linux). Obs: O pacote minimal normalmente é suficiente para a maioria das necessidades.

  3. Descompacte o pacote e grave o caminho completo de instalação
  4. Ao descompactar o pacote do Zend Framework, será criada uma estrutura de diretórios contendo os componentes do framework. Obtenha o caminho completo de instalação, incluindo o subdiretório library/ para podermos setá-lo no include path do php. No meu caso, o caminho completo ficou sendo:
    /home/douglas/ZendFramework-minimal-2.x.x/library/

  5. Configurando o include path e autoloader
  6. Vamos criar um arquivo header.php que deverá ser incluído em todos os seus scripts que utilizarão componentes independentes do Zend Framework 2. Esse arquivo é responsável por configurar o caminho do framework no include path do PHP e por configurar o Auto Loader padrão para as classes presentes no framework da Zend.

    Veja que estamos o componente StandardAutoLoader do próprio Zend Framework. É um autoloder compatível com PSR-0:

    PS: Lembre-se de alterar o caminho especificado na variável $zf2_path de acordo com o caminho da sua instalação:

    <?php
    $zf2_path = '/home/douglas/ZendFramework-minimal-2.x.x/library/';
    set_include_path(get_include_path() . PATH_SEPARATOR . $zf2_path);
    
    require_once($zf2_path . '/Zend/Loader/StandardAutoloader.php');
    $loader = new Zend\Loader\StandardAutoloader(
            array(
                    'namespaces' => array(
                            'Zend' => $zf2_path . '/Zend',
                    ),
                    'fallback_autoloader' => true,
            )
    );
    $loader->register();
    

Exemplos de uso

Neste momento já temos o ambiente pronto para que você possa usar os componentes do Zend Framework2 de forma independente. Basta incluir o arquivo header.php criado anteriormente e instanciar as classes desejadas. Abaixo eu reuni alguns exemplos simples e interessantes. Aconselho você consultar a documentação de referência no próprio site do projeto para mais componentes e para mais detalhes sobre suas utilizações. (Veja o link na área Referências)

Os componentes utilizados no exemplo abaixo foram: Zend\Validator, Zend\Http, Zend\Crypt, Zend\Mail, Zend\Log, Zend\Json e Zend\Filter

<?php
// inclui header zf2 autoload
require_once("header.php");

$validator = new Zend\I18n\Validator\Alnum();
var_dump($validator->isValid('Abcd')); // true
var_dump($validator->isValid('teste??')); // false

// Realizando requisicoes HTTP GET
$request = new Zend\Http\Request();
$request->setUri('http://www.google.com/search?q=php'); // URL traz resultado de busca por PHP
$request->setMethod('GET'); // method

$client = new Zend\Http\Client();
$response = $client->dispatch($request);

$content = $response->getBody(); // corpo do retorno da requisicao
var_dump($content); 

// criptografia
$bcrypt = new Zend\Crypt\Password\Bcrypt;
$str_encrypted = $bcrypt->create('Pasqua Tecnologia');
var_dump($str_encrypted);

var_dump($bcrypt->verify('Pasqua Tecnologia', $str_encrypted)); // true
var_dump($bcrypt->verify('Pasqua', $str_encrypted)); // false

// enviando email
use Zend\Mail;

$mail = new Mail\Message();
$mail->setBody('Corpo do email.');
$mail->setFrom('suporte@dominio-exemplo.org', 'Suporte');
$mail->addTo('douglas.pasqua@gmail.com', 'Douglas V. Pasqua');
$mail->setSubject('Apenas Teste do ZF2 Mail');

$transport = new Mail\Transport\Sendmail();
$transport->send($mail); // envia o email

// logging
$writer = new Zend\Log\Writer\Stream('/tmp/logfile');
$logger = new Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info('Mensagem Informativa'); // grava mensagem no log /tmp/logfile

// JSON
$phpNative = array('nome' => 'Douglas V. Pasqua', 'idade' => 30);

$json = Zend\Json\Json::encode($phpNative);
var_dump($json);

// Filtros
$strtolower = new Zend\Filter\StringToLower;
echo $strtolower('I LOVE ZF2!'); // i love zf2!

Referências

http://framework.zend.com/manual/2.2/en/index.html

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Posted on maio 29, 2013. Filed under: PHP, Zend Framework | Tags:, , , |

Esta dica é para você que precisa renderizar uma view diferente do action padrão no Zend Framework 2. Você precisara usar a função setTemplate do objeto ViewModel:

public function indexAction()
{
    $view = new ViewModel(array('variable' => $value));
    $view->setTemplate('module/controler/action.phtml'); // caminho para view a ser renderizada
    return $view;
}

Opicionalmente, você pode desabilitar a renderização do layout, usando o método setTerminal:

public function indexAction()
{
    $view = new ViewModel(array('variable' => $value));
    $view->setTerminal(true); // desabilita a renderização do layout
    $view->setTemplate('module/controler/action.phtml'); // caminho para view a ser renderizada
    return $view;
}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Redirecionamento de Rota

Posted on maio 29, 2013. Filed under: PHP, Zend Framework | Tags:, , , |

Nesta dica temos como realizar o redirecionamento de rotas dentro da camada de Controller no Zend Framework 2. Lembre-se que isso é válido de acordo com as rotas que você tem configurado no arquivo module.config.php do seu módulo.

Redirecionamento simples de rota:

public function indexAction()
{
    return $this->redirect()->toRoute('nome_da_rota'); // redireciona para outra rota configurada no module.config.php
}

Você pode especificar também o action e/ou seus parâmetros:

public function indexAction()
{
    // redireciona para outra rota configurada no module.config.php, espeficando action e parametros
    return $this->redirect()->toRoute('nome_da_rota', array('action' => 'nome_do_action', 'id' => 9999)); 
}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Webservices SOAP com Zend Framework 2

Posted on maio 18, 2013. Filed under: PHP, Zend Framework | Tags:, , , , |

Introdução

Neste artigo vamos aprender como criar webservices SOAP com Zend Framework 2. Em artigo anterior, Webservices com Zend Framework parte I, vimos como trabalhar com Webservices SOAP no Zend Framework I. Portanto, este artigo serve com uma atualização do anterior.

O exemplo demonstrado neste artigo utiliza o Zend Framework 2 de forma Standalone, ou seja, de forma independente da estrutura do MVC.

Preparação

Para preparar o ambiente para o Webservice com o Zend Framework 2 de forma Standalone, iremos realizar dois processos: 1) Baixar e descompactar o pacote do Zend Framework. 2) Configurar o autoload do php para que seja possível incluir automaticamente as bibliotecas do Zend Framework necessárias para nosso objetivo.

  1. Baixando e descompactando o Zend Framework
  2. Acesse o link abaixo e faça o download do pacote Zend Framework 2.x.x Minimal:

    http://framework.zend.com/downloads/latest
    PS: Não há necessidade de baixar o pacote pelo site da Zend. Pode baixar pelo link direto. (.tar.gz ou .zip)

    Descompacte o pacote dentro do diretório onde irá criar seu webservice SOAP (server ou client) e faça um link (ou copie) o diretório library/Zend para o diretório corrente. Veja exemplo de como fazer no Linux:

    $ tar zxpf ZendFramework-minimal-2.x.x.tgz
    $ ln -s ./ZendFramework-minimal-2.x.x/library/Zend
    

    PS: Outra opção é colocar o caminho completo para o diretório ZendFramework-minimal-2.x.x/library/Zend dentro do include path do php

  3. Configurando o autoload
  4. É necessário registrarmos no autoload do PHP a lógica para que nosso script possa incluir automaticamente todas as libs do Zend Framework necessárias. Esse procedimento irá nos poupar o trabalho de ter que incluir manualmente todos os arquivos necessários, que é uma opção muito custosa.

    Crie um arquivo chamado autoload-zend.php, com o seguinte conteúdo:

    <?php
    // auto load compativel com zend framework
    spl_autoload_register(function ($className) {
    
          // We assume classes with underscores are Zend Framework pseudo namespaced classes
          if (strpos($className, '_' ) !== FALSE) {
                $className = str_replace('_', '/', $className );
          }
    
          // This line provides real php 5.3 namespace support
          $file = str_replace('\\', '/', $className . '.php');
    
          // search include path for the file.
          $include_dirs = explode(PATH_SEPARATOR, get_include_path());
    
          foreach($include_dirs as $dir) {
            $full_file = $dir . '/'. $file;
    
            if (file_exists($full_file)) {
                require_once $full_file;
                return true;
            }
          }
    
          return false;
    });
    
  5. Criando o Webservice SOAP
  6. Para criar nosso Webservice SOAP, vamos utilizar a classe Zend\Soap\Server e Zend\Soap\AutoDiscover. A classe Zend\Soap\AutoDiscover será utilizada para geração automática do WSDL necessário para a comunicação do protocolo SOAP. É possível trabalhar no PHP no modo non-WSDL, sem a utilização do WSDL. Porém é uma pratica não aconselhada, pois a maioria dos Webservices SOAP em outras linguagens não permite o modo non-WSDL. A classe Zend\Soap\Server é responsável por gerenciar o Webservice em si.

    Segue abaixo o código do Webservice SOAP de exemplo (Server):
    No nosso exemplo, o webservice estará servindo a funcionalidade de um calculadora básica: soma e subtração

    Arquivo soap-server.php

    <?php
    // incluir o autoload para o zf2
    require_once("autoload-zend.php");
    
    if (isset($_GET['wsdl'])) {
            // geracao automatica do WSDL
            $autodiscover = new Zend\Soap\AutoDiscover();
            $autodiscover->setUri('http://127.0.0.1/services/soap-server.php');
    
            // servindo a classe Calculadora
            $autodiscover->setClass('Calculadora');
            $autodiscover->handle();
    } else {
            // instancia do Soao Server
            $soap = new Zend\Soap\Server("http://127.0.0.1/services/soap-server.php?wsdl");
    
            // servindo a classe Calculadora
            $soap->setClass('Calculadora');
            $soap->handle();
            exit;
    }
    
    /*
     * Classe calculadora
     */
    class Calculadora {
    
            /**
             * Realiza Soma
             * @param integer $a
             * @param integer $b
             * @return integer
             */
            public function soma($a, $b) {
                    return $a + $b;
            }
    
            /**
             * Realiza Subtracao
             * @param integer $a
             * @param integer $b
             * @return integer
             */
            public function subtrai($a, $b) {
                    return $a - $b;
            }
    }
    

    Considerações:

    • Lembre-se de modificar a URL onde seu webservice esta acessível. Trocando http://127.0.0.1/services/soap-server.php pela URL correta de acordo com o seu ambiente.
    • Preste atenção nos comentários utilizados nos métodos da classe Calculadora. Eles são utilizados para ajudar o Zend\Soap\AutoDiscover na criação do WSDL. Lembre-se de ajustá-los de acordo com os tipos de dados manipulados pelos métodos do seu webservice.
  7. Criando o Webservice Cliente
  8. Vamos demonstrar como criar o webservice cliente para consumir o webservice anterior usando as classes do Zend Framework 2. Segue abaixo a implementação do cliente do webservice usando a classe Zend\Soap\Client:

    Arquivo soap-client.php

    <?php
    // incluir o autoload para o zf2
    require_once("autoload-zend.php");
    
    // canal de comunicacao com o webservice, apontar para a URL do WSDL
    $soap = new Zend\Soap\Client("http://127.0.0.1/services/soap-server.php?wsdl");
    
    // utilizando as funcoes do webservice
    echo $soap->soma(5, 5) . "<br />"; // 10
    echo $soap->subtrai(100, 50) . "<br />"; // 50
    
  9. Referências
  10. Neste artigo foi abordado a essência da criação de Webservices SOAP com Zend Framework 2. Para se aprofundar mais no assunto, segue links da documentação oficial do Zend Framework 2 referente a Webservices SOAP:

    http://framework.zend.com/manual/2.0/en/modules/zend.soap.server.html
    http://framework.zend.com/manual/2.0/en/modules/zend.soap.client.html
    http://framework.zend.com/manual/2.0/en/modules/zend.soap.auto-discovery.html

    Caso queira uma introdução bem feita sobre a arquitetura do protocolo SOAP:

    http://www.w3schools.com/soap/default.asp

Ler Post Completo | Make a Comment ( 3 so far )

Zend Framework 2: Retornando dados no formato JSON no Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

O Zend Framework 2 disponibiliza uma forma simples de retornar dados no formato JSON na camada de View. Basta usar a classe JsonModel no lugar de ViewModel no action do seu Controller. Para utilizar essa funcionalidade, primeiro é necessário habilitar o JsonStrategy dentro do arquivo module.config.php referente ao seu módulo. Veja como fazer abaixo:

// arquivo module.config.php
'view_manager' => array(
		'display_not_found_reason' => true,
		'display_exceptions'       => true,
		'doctype'                  => 'HTML5',
		'not_found_template'       => 'error/404',
		'exception_template'       => 'error/index',
		'template_map' => array(
				'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
				'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
				'error/404'               => __DIR__ . '/../view/error/404.phtml',
				'error/index'             => __DIR__ . '/../view/error/index.phtml',
		),
		'template_path_stack' => array(
				__DIR__ . '/../view',
		),
		'strategies' => array(
				'ViewJsonStrategy',
		),
),

Para gerar um conteúdo no formato JSON, basta retornar uma instância da classe JsonModel. Veja exemplo abaixo:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\View\Model\JsonModel;

class IndexController extends AbstractActionController
{
	public function indexAction()
	{
		return new JsonModel(array(
				'nome' => 'Douglas V. Pasqua',
				'email' => 'blablabla@bla.xyz',
		));
	}
}

Ao acessar o action, a saída gerada seria:

{"nome":"Douglas V. Pasqua","email":"blablabla@bla.xyz"}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Desabilitando a renderização do Layout e View

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

  • Desabilitando a renderização de Layout e View (Ambos)
  • Desabilitar a renderização do Layout e View é bem simples. Veja abaixo:

    namespace Application\Controller;
    
    use Zend\Mvc\Controller\AbstractActionController;
    
    class IndexController extends AbstractActionController
    {
    	public function indexAction()
    	{	
    	     echo "texto qualquer";   
    	     return $this->response;
    	}
    }
    
    
  • Desabilitando somente a renderização do Layout
  • Segue exemplo abaixo caso queira desabilitar somente a renderização do Layout, mas manter a renderização da view:

    namespace Application\Controller;
    
    use Zend\Mvc\Controller\AbstractActionController;
    use Zend\View\Model\ViewModel;
    
    class IndexController extends AbstractActionController
    {
    	public function indexAction()
    	{	
    		$view_params = array(); // parametros passados para a view
    		$viewModel = new ViewModel($view_params);
    		$viewModel->setTerminal(true); // desabilita a renderizacao do layout
    		return $viewModel;
    	}
    }
    

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Renderizando a view dentro do Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

Renderizar a View dentro do Controller pode ser útil caso desejamos retornar a view renderizada em algum outro formato que não seja o padrão. A view renderizada será retornada para dentro de uma variável. Dessa forma podemos retornar o conteúdo da view para um requisição ajax por exemplo. Veja abaixo como fazer:

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{
	public function indexAction()
	{
		$view_params = array (
				'nome' => 'Douglas V. Pasqua',
		);
		
		$viewModel = new ViewModel($view_params);
		$viewModel->setTemplate('application/index/index.phtml'); // caminho para o template que será renderizado
		$html = $this->getServiceLocator()->get('ViewRenderer')->render($viewModel);
				
		// enviar conteudo de $html via ajax
	}
}

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Chamando View Helpers dentro do Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

Zend Framework 2: Chamando View Helpers dentro do Controller

Posted on abril 30, 2013. Filed under: PHP, Zend Framework | Tags:, , |

É possível fazer chamadas para view helpers dentro do Controller. Muito útil em determinadas situações. Abaixo temos o exemplo da utilização do view helper chamado paginationControl. A situação foi útil pois precisava retornar o html referente a paginação de uma lista via requisição Ajax.

// instanciando o Zend Paginator de acordo com suas proprias regras
$paginator = new \Zend\Paginator\Paginator(new \Zend\Paginator\Adapter\ArrayAdapter($array));
...

// obtendo a instância do view helper chamado paginationControl dentro do Controller
$paginationControlHelper = $this->getServiceLocator()->get('viewhelpermanager')->get('paginationControl');

// usando o view helper dentro do controller
$html = $paginationControlHelper($paginator, 'Sliding', 'module/paginator_control');

// temos dentro do $html o renderização da paginação retornada pelo View Helper paginationControl
// podemos usar o $html para retorno de um requisição ajax

Outras dicas para Controllers no Zend Framework 2

Zend Framework 2: Desabilitando a renderização do Layout e View
Zend Framework 2: Renderizando a view dentro do Controller
Zend Framework 2: Retornando dados no formato JSON no Controller
Zend Framework 2: Redirecionamento de Rota
Zend Framework 2: Renderizando uma view diferente do Action padrão do Controller

Ler Post Completo | Make a Comment ( None so far )

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

Ler Post Completo | Make a Comment ( None so far )

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

%d blogueiros gostam disto: