Iniciando com Zend Framework 2: Skeleton e ZfcUser

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)
(De qualquer forma, posso dar uma mão pra galera que estiver com dificuldades em alguma dessas partes. Basta postar nos comentários!)

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

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!

16 Responses to “Iniciando com Zend Framework 2: Skeleton e ZfcUser”

  1. Getting started with the ZF2 skeleton and ZfcUser » Evan's Blog

    […] Update: Rafael Jaques has kindly translated this post to Portuguese. […]

    Responder
  2. Daniel Gimenes

    Ótimo artigo e ótimo blog. Parabéns (:

    Responder
  3. CesarDraw

    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!

    Responder
  4. Raphael Pontes

    faz tempo que não vejo esse site sendo atualizado. era tão bom.

    Responder
  5. Pedro Henrique

    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

    Responder
  6. Jonecir

    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.

    Responder
  7. Marcos Bruno

    Sigam https://github.com/ZF-Commons/ZfcUser que não tem erro!

    Responder
  8. Igor

    O zend 2 esta assustador, faltou falar sovre o zfcuseradmin

    Responder
    • Leandro

      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.

      Responder
  9. Diego

    Muito bom. Parabéns

    Responder

Deixar uma Resposta