Tutorial adaptado do original escrito por EvanDotPro: http://blog.evan.pro/getting-started-with-the-zf2-skeleton-and-zfcuser
Este é um tutorial feito para ser curto e fácil de seguir para lhe ajudar a começar com o Zend Framework 2.0 e um dos seus módulos mais comuns, o ZfcUser. Ao final deste tutorial você terá uma aplicação básica no ZF2 com registro de usuário e autenticação.
Pré-requisitos
Para este tutorial presumo que você tenha instalado:
- PHP 5.3.3+ (com pdo-sqlite ou pdo-mysql)
- Um web server e conhecimentos de como configurar um virtual host
- Git (ou pelo menos a capacidade de acessar o Github e baixar o zip do projeto, o que vai te obrigar a baixar o framework de outro source e colocar no diretório apropriado)
Se você tiver o PHP 5.4+, tecnicamente nem precisará de um web server pra testar o Zend Framework 2, uma vez que você pode simplesmente utilizar o novo servidor para desenvolvimento embutido no PHP.
Um comentário sobre o composer
Enquanto o composer é uma maneira suportada de configurar o skeleton, eu prefiro simplesmente utilizar o git para esse tutorial. Na minha opinião isso torna as coisas mais simples e fáceis de debugar caso alguém tenha problemas em seguir o tutorial.
Passo 1: Obtendo o Skeleton
O primeiro passo é clonar o skeleton application:
[user@workstation workspace]$ git clone --recursive https://github.com/zendframework/ZendSkeletonApplication.git
Depois, configure um vhost apontando para o diretório público da sua novo skeleton clonado. Neste ponto você já deve ser capaz de acessar http://seuvhost/ no seu navegador e ver o seguinte:

Se você estiver utilizando o PHP 5.4 e quiser utilizar o servidor embutido, simplesmente abra um novo terminal, cd para o diretório public e execute:
[user@workstation public]$ php -S 8000
Com isso rodando você deverá ser capaz de acessar http://localhost:8000/ e visualizar a aplicação.
Passo 2: Configurando uma conexão com o banco de dados
Para o ZfcUser iremos necessitar de um banco de dados para guardar os usuários. Neste tutorial irei cobrir o MySQL e o SQLite, mas com o ZfcUser e o Zend\Db suportam muitos outros SGBDs.
Crie um novo arquivo ./config/autoload/database.local.php e preencha-o com o seguinte:
Para o MySQL:
<?php
return array(
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
'db' => array(
'driver' => 'pdo',
'dsn' => 'mysql:dbname=CHANGEME;host=localhost',
'username' => 'CHANGEME',
'password' => 'CHANGEME',
),
);
Ou para o SQLite:
<?php
return array(
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
'db' => array(
'driver' => 'pdo',
'dsn' => 'sqlite:' . getcwd() . '/data/users.db',
)
);
Passo 3: Instalando o ZfcUser
Agora vamos instalar o ZfcUser. Primeiro cd para o diretório vendor e execute os seguintes comandos:
[user@workstation vendor]$ git clone https://github.com/ZF-Commons/ZfcUser.git [user@workstation vendor]$ git clone https://github.com/ZF-Commons/ZfcBase.git
Nota: ZfcBase é apenas uma dependência do ZfcUser – contém algumas classes básicas que são úteis para diversos módulos.
Agora habilite os módulos editando ./config/application.config.php e adicionando-os à array demodules:
<?php
return array(
'modules' => array(
'Application',
'ZfcBase',
'ZfcUser',
),
'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{,*.}{global,local}.php',
),
'module_paths' => array(
'./module',
'./vendor',
),
),
);
Agora precisamos importar o schema do banco do ZfcUser. Se estiver usando o SQLite será necessário apenas uma linha de comando que deverá ser executada na raíz do projeto:
[user@workstation skeleton]$ cat vendor/ZfcUser/data/schema.sqlite.sql | sqlite3 data/users.db
(Se alguém souber como se faz isso no Windows, por favor poste nos comentários!)
Se estiver usando MySQL importe o arquivo ./vendor/ZfcUser/data/schema.sql para o seu banco que configuramos antes.
Deve ser o suficiente! Tente acessar http://seuvhost/user e você será recebido com a tela de login:

Agora você já tem uma aplicação básica rodando com o Zend Framework 2 com suporte a registro e autenticação!
Recursos
- ZfcUser Wiki (inglês)
- ZF-Commons ZfcUser RFC (inglês)
Aproveite para dar uma conferida em algumas extensões para o módulo ZfcUser que já existem:
- BjyAuthorize – Adiciona suporte a ACL utilizando Zend\Acl.
- CdliTwoStageSignup – Adiciona uma etapa de verificação de e-mail ao processo de registro.
- CdliUserProfile – Um sistema de perfil de usuário.
- CdliAutogenUsername – Permite a utilização de nomes de usuário gerados automaticamente depois do registro.
- ScnSocialAuth – Adiciona autenticação através de redes sociais ao ZfcUser para sites como Google, Facebook, Twitter, Yahoo!, etc.
- EdpGithub – Adicionada autenticação do Github ao ZfcUser.
Se você estiver se perguntando “e agora?”, tire alguns minutos para ler o excelente tutorial de ZF2 do Rob Allen que explica a criar uma aplicação básica do zero e/ou venha conversar conosco no #zftalk.2 @ Freenode se tiver dúvidas.
Um abraço a todos e fiquem com Deus!
Pingback: Getting started with the ZF2 skeleton and ZfcUser » Evan's Blog
Ótimo artigo e ótimo blog. Parabéns (:
Rafael, parabéns por compartilhar em nosso idioma tupiniquin esse Post do Evan.
Bom fiz tudo certinho e em menos de 5 minutos tava tudo rodando.
Porém ao clicar no link Sign up! que redireciona para http://app1.dev/user/register, apareceram alguns erros que a principio era só fazer uns ajustes nozfcuser.global.php.dist só que agora está dando o seguinte erro:
ZendServiceManagerExceptionServiceNotFoundException
File:
/var/www/zf22/app1/vendor/ZF2/library/Zend/ServiceManager/ServiceManager.php:393
Message:
An alias "zfcuser_zend_db_adapter" was requested but no service could be found.
Aonde que eu devo alterar para que o adapter funcione? Ah… estou usando sqlite.
Um abração e fica com Deus!
Também tive esse problema, encontrou algum meio de resolve-lo? Abraço!
Fiz tudo do zero de novo dessa vez em uma VM do debian com ZendServer e deu certo.
Vocês ativaram o ZFCUser nos módulos?
Ola,
Parabens pelo tutorial. Consegui instalar o ZF2 mais facil q outros locais.
Tive o mesmo erro qdo clicando em "Sign up" e nao consigo resolver.
Ja uso o Drupal e pensei: Serah q nao é mais facil usar a autenticação do Drupal para acessar algumas partes de minha aplicacao?
Obrigado qq resposta.
faz tempo que não vejo esse site sendo atualizado. era tão bom.
Não tá fácil arrumar tempo… :(
Bom Dia Rafael, legal seu tutorial eu segui a risca ele, mas esta dando um problema
na tela de login apareceu sem o layout e com uma mensagem de erro abaixo dos campos
Fatal error: Uncaught exception 'ZendFormExceptionDomainException' with message 'ZendFormViewHelperFormButton::render expects either button content as the second argument, or that the element provided has a label attribute; neither found' in C:binlibraryvendorzendframeworkzendframeworklibraryZendFormViewHelperFormButton.php:123 Stack trace: #0 C:binlibraryvendorzendframeworkzendframeworklibraryZendFormViewHelperFormButton.php(154): ZendFormViewHelperFormButton->render(Object(ZendFormElementButton), NULL) #1 [internal function]: ZendFormViewHelperFormButton->__invoke(Object(ZendFormElementButton)) #2 C:binlibraryvendorzendframeworkzendframeworklibraryZendViewRendererPhpRenderer.php(351): call_user_func_array(Object(ZendFormViewHelperFormButton), Array) #3 C:binlibraryvendorzf-commonszfc-userviewzfc-useruserlogin.phtml(25): ZendViewRendererPhpRenderer->__call('formButton', Array) #4 C:binlibraryvendorzf-commonszfc-userviewzfc-useruserlogin.phtml(2 in C:binlibraryvendorzendframeworkzendframeworklibraryZendFormViewHelperFormButton.php on line 123
se puder ajudar agradeceria muito
Olá Rafael, como que eu executo os comandos:
[user@workstation vendor]$ git clone https://github.com/ZF-Commons/ZfcUser.git
[user@workstation vendor]$ git clone https://github.com/ZF-Commons/ZfcBase.git
Estou usando o comand prompt do DOS no win 7.
Sigam https://github.com/ZF-Commons/ZfcUser que não tem erro!
Executei por la tb e realmente nao ha problemas
O zend 2 esta assustador, faltou falar sovre o zfcuseradmin
O que você chama de assustador? no meu caso fiquei assustado por não ter suporte a OCI(oracle connection) nem PDO oracle.
achei muito falho pois eu poderia até desenvolver alguma coisa pra realizar este trabalho mas se o frame não te dá isso não tá legal.
Muito bom. Parabéns