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 respostas para “Iniciando com Zend Framework 2: Skeleton e ZfcUser”

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

  2. Daniel Gimenes disse:

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

  3. CesarDraw disse:

    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!

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

  5. Pedro Henrique disse:

    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

  6. Jonecir disse:

    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.

  7. Igor disse:

    O zend 2 esta assustador, faltou falar sovre o zfcuseradmin

    • Leandro disse:

      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.

  8. Diego disse:

    Muito bom. Parabéns

Deixe uma resposta