Tutorial ZF2 + Doctrine + ZfcUser + Los – Parte 3

Nesta terceira parte do tutorial, vamos nos concentrar em layout e interface com usuário.

Como falei no post sobre o LosUi, na maioria dos projetos acabamos por baixar as mesmas bibliotecas javascript e css. Eu costumo usar muito as mesmas:

Depois de baixar, copiava para o diretório public, mudava a versão no layout.html etc. Então resolvi criar o LosUi com o intuito de facilitar este processo e a manutenção. Quando uma das bibliotecas lançam uma versão nova, atualizo o LosUi, gero nova versão e basta atualizar pelo composer nos meus projetos, sem me preocupar com números de versão, alterar arquivo de layout etc.

No primeiro post, instalamos os módulos necessários, então vamos começar fazendo as alterações no nosso arquivo module/Application/config/module.config.php. Localize a chave ‘service_manager’ e acrescente a factory do Navigation, que será usado pelo menu e breadcrumb (migalha de pão):

E acrescentar no mesmo arquivo o nosso menu superior:

Se olharmos o module.config.php dos módulos Cliente e Usuario, veremos que já existem as definições de menu para ambos, sobre a chave Crud.

Vamos alterar o module/Application/view/layout/layout.phtml:

Vamos abrir o projeto no navegador e ver o que aconteceu.

Menu Tutorial

Temos um menu superior, já com um link para a home, um para cadastro e já com os link do CRUD de Cliente e Usuário! Temos também nosso breadcrumb embaixo. Muito fácil não é?

Para não nos atrapalhar, vamos deixar todas as permissões do sistema como acessível pelo visitante. Altere o arquivo config/autoload/zfcrbac.global.php:

Agora podemos clicar no Cadastro -> Cliente e Cadastro -> Usuário. Entre no Cadastro de Cliente e clique no botão + para adicionar um cliente:

AdicionandoCliente

Temos uma form de cadastro pronta e estilizada com o Bootstrap3. Tudo gerado automaticamente pelo LosBase, extraindo os campos da entidade Cliente. Ele já cria a form, valida os dados enviados, salva no banco, etc.

Note que o breadcrumb seguiu nosso caminho (Cadastro / Cliente / Add), mas vamos alterar o Label da última parte. Abre o arquivo module/Cliente/config/module.config.php:

Agora que ajustamos o breadcrumbs, clique em Salvar, mas sem digitar nada.

AddClienteErro

Ótimo, os erros já aparecem quando necessários e realçando os respectivos campos. Mas estamos fazendo um projeto em português, então vamos alterar as mensagens de erro do ZF2 para tal. Abra o module/Application/Module.php e acrescente as linhas marcadas:

Vamos no nosso formulário para ver como ficou:

AddClienteErroBR

Estamos progredindo, nossas mensagens de erro já estão em português. Hora de salvar um Cliente. Preencha os campos corretamente e clique em Salvar.

ListaCliente

Nosso cliente foi adicionado com sucesso e já temos a mensagem também! Mas está mostrando apenas o ID, vamos colocar algo mais amigável. Vamos alterar o arquivo module/Cliente/view/cliente/crud/list.phtml:

Vamos atualizar a página:

ListaCliente2

Que diferença! E o preço já está no nosso formato, graças ao tipo brprice na nossa entidade.

Por padrão, o LosBase cria um paginador na lista de entidades quando ultrapassar 20 linhas, e o LosUi estila o paginador com o Paginator do Bootstrap:

ListaClientePaginada

Muito prático e fácil agora trabalhar com o Navigation, Paginator, Forms e tudo isso praticamente sem escrever código! Vamos relembrar como está nosso Controller de Cliente:

Podemos alterar e excluir também.

O que acharam dos recursos do LosUI e LosBase?

Referência:

Parte 1: Instalação e configuração

Parte 2: Banco de dados (Doctrine)

Parte 3: Visual e Layout (LosUi)

Parte 4: Autenticação e Autorização (ZfcUser e ZfcRbac)

Parte 5: Usando o sistema

 

Até a próxima!

Leandro Silva

PHP developer since 1997, loves movies, music and dogs.

22 Comentários para: “Tutorial ZF2 + Doctrine + ZfcUser + Los – Parte 3

      • Leandro tá assim:

        array(
        ‘DoctrineModule’,
        ‘DoctrineORMModule’,
        ‘ZfcBase’,
        ‘ZfcUser’,
        ‘ZfcRbac’,
        ‘ZfcUserDoctrineORM’,
        ‘AssetManager’,
        ‘LosBase’,
        ‘LosUi’,
        ‘LosLog’,
        ‘Application’,
        ‘Cliente’,
        ‘Usuario’
        ),
        ‘module_listener_options’ => array(
        ‘module_paths’ => array(
        ‘./module’,
        ‘./vendor’
        ),
        ‘config_glob_paths’ => array(
        ‘config/autoload/{,*.}{global,local}.php’
        )
        )
        );

          • Achamos o problema e se acontecer com mais alguém e estiver usando o webserver próprio do php, execute-o assim:

            php -S 0.0.0.0:8888 -t public public/index.php

            Deve funcionar.
            Abraços,
            Leandro

    • Olá Esteves! Obrigado pela força! Passei por algumas dificuldades que limitaram meu tempo “livre”, mas as coisas estão voltando ao normal e devo lançar os próximos posts da série no início da semana. Abs! Leandro Silva

  1. PHP Fatal error: Class ‘Locale’ not found in /var/www/lansoweb/module/Application/src/Application/Module.php on line 20

    como eu resolvo esse erro? sera que nao tenho o arquivo? como instalo?

    • Esta classe pertence a um módulo do PHP chamado intl e precisa estar instalado e configurado. Se estiver no linux, basta digitar no Ubuntu:
      apt-get install php5-intl
      Ou no CentOS:
      yum install php5-intl

      No windows, vai depender de qual LAMP está usando (Zend Server, WAMP, etc). Aí sugiro ir na documentação para habilitar o módulo.

      Abraços,
      Leandro

    • Eu tive o mesmo problema, usando o wamp.

      Você tem que copiar todos os arquivos (que começam com icu*), dependendo da versão do wamp muda a numeração dos dlls:

      icudt51.dll
      icuin51.dll
      icuio51.dll
      icule51.dll
      iculx51.dll
      icutest51.dll
      icutu51.dll
      icuuc51.dll

      De:
      \bin\php\php5.5.12\

      Para:
      \bin\apache\apache2.4.9\bin\

      E você também precisa ativar intl no arquivo php.ini (descomentar esta linha):
      ;extension=php_intl.dll

      Você também precisará adicionar esses use’s em /module/Application/Module.php para funcionar o Translator:

      use Zend\Validator\AbstractValidator;
      use Zend\I18n\Translator\Translator;

      E reiniciar o servidor. Deve funciona bem.

        • Você pode verificar quais as extensões estão compiladas, executando:
          php -m

          Procure por intl, é bem provável que você não encontre.

          Felizmente isso é absolutamente fácil. Apenas execute os seguintes comandos
          sudo apt-get install php5-intl

          Em seguida, você precisa reiniciar o Apache
          sudo service apache2 restart

          Verificar quais as extensões estão compiladas novamente.
          php -m

          Você também pode verificar as extensões copiladas editando o arquivo /public/index.php colocando no topo dele:
          phpinfo(INFO_MODULES);die;

  2. O diretório das languages mudou na versão 2.5.0 do Zend de ‘vendor/zendframework/zendframework/resources/languages/pt_BR’ para ‘vendor/zendframework/zend-i18n-resources/languages/pt_BR’.

  3. Olá Leandro. Estou acompanhando o tutorial na parte 3 e, ao tentar acessar qualquer página de cadastro eu tenho erros com o Paginator…
    Segue:
    /Library/WebServer/Documents/ProjetoCamara/projeto/vendor/zendframework/zend-paginator/src/Paginator.php:633

    Error producing an iterator

    #0 /Library/WebServer/Documents/ProjetoCamara/projeto/module/Vereador/view/vereador/crud/list.phtml(10): Zend\Paginator\Paginator->getIterator()
    #1 /Library/WebServer/Documents/ProjetoCamara/projeto/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php(501): include(‘/Library/WebSer…’)
    #2 /Library/WebServer/Documents/ProjetoCamara/projeto/vendor/zendframework/zend-view/src/View.php(205): Zend\View\Renderer\PhpRenderer->render(Object(Zend\View\Model\ViewModel))
    #3 /Library/WebServer/Documents/ProjetoCamara/projeto/vendor/zendframework/zend-view/src/View.php(233): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
    …….
    Agradeço se puder me ajudar.

      • Obrigada pela atenção. Eu comentei as linhas abaixo referentes ao listAction do AbstractCrudController e o erro sumiu. Penso que seja algum problema relacionado ao Postgres ..
        /*
        ->orderBy(‘e.’.$sort, $order)
        ->setFirstResult($offset)
        ->setMaxResults($limit); */

  4. Olá Leandro, estou seguindo o seu tutorial e estou com problemas nos forms gerados, pois eles não aparecem os nomes dos campos somente os input text e também não está validando o form ao fazer o submit. O que deixei passar?

  5. Achei bem bacana o tutorial.
    Não estou achando tão produtivo desenvolver com o ZF2, tenho um pouco de experiencia no ZF1 e projetos que faço em uma ou duas semana estou precisando de meses no ZF2.
    Também gosto de diagramar o banco de dados antes de começar a desenvolver, neste tutorial ficou como segundo plano por causa do Doctrine certo? Nunca tinha utilizado o Doctrine e meio que me bloqueou nas querys que costumo fazer.
    Tem alguma dica p/ melhorar a produtividade?

  6. Alguem passou por esse erro????

    Fatal error: Uncaught Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\View\Helper\Navigation\PluginManager::get was unable to fetch or create an instance for Navigation in C:\xampp\htdocs\auto-avaliacao\vendor\zendframework\zend-servicemanager\src\ServiceManager.php:555 Stack trace: #0 C:\xampp\htdocs\auto-avaliacao\vendor\zendframework\zend-servicemanager\src\AbstractPluginManager.php(161): Zend\ServiceManager\ServiceManager->get(‘Navigation’, true) #1 C:\xampp\htdocs\auto-avaliacao\vendor\zendframework\zend-view\src\Helper\Navigation\AbstractHelper.php(257): Zend\ServiceManager\AbstractPluginManager->get(‘Navigation’) #2 C:\xampp\htdocs\auto-avaliacao\vendor\zendframework\zend-view\src\Helper\Navigation\AbstractHelper.php(529): Zend\View\Helper\Navigation\AbstractHelper->parseContainer(‘Navigation’) #3 C:\xampp\htdocs\auto-avaliacao\vendor\zendframework\zend-view\src\Helper\Navigation\Menu.php(82): Zend\View\Helper\Navigation\AbstractHelper->setContainer(‘Navigation’) #4 [internal function]: Zend\View\Helpe in C:\xampp\htdocs\auto-avaliacao\vendor\zendframework\zend-servicemanager\src\ServiceManager.php on line 555

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

*