Criar um módulo no Zend Framework 2

modulos-zend-framework-2

Imagem copiada na cara dura de modules.zendframework.com/

Para dar continuidade à serie de posts à respeito do Zend Framework 2, hoje escreverei para os interessados como criar um módulo novo no framework. Relembre as outras partes do post com os links a seguir:

Parte 1 – Rodar o Zend Framework 2 pela primeira vez

Parte 2 – Estrutura do Zend Framework 2

Parte 3 – Arquivos de configuração do Zend Framework 2

 

Pois bem, o Zend Framework em sua versão 2.x deixou tudo extremamente organizado. Esta versão deixou bem claro (e prático) o uso de módulos. Em sua primeira versão já havia esta ideia, porém não era seguida a risca. Minha ideia neste post é mostrar à você como criar um novo módulo, que chamaremos de “Album” (para listar alguns dos bons discos de rock já lançados). Vamos criar primeiramente os arquivos de configuração do módulo, e mais adiante criaremos duas páginas estáticas para exemplificar a arquitetura MVC (sem o “M” por enquanto), implementada pelo Zend Framework.

Mãos à obra então…

 

Criando a estrutura do Módulo

Utilizaremos, aqui, a mesma base dos posts anteriores (links mais acima). Crie, dentro do diretório “zf2/module”, uma nova pasta chamada “Album”. Dentro de “Album”, crie 3 pastas: “config”, “src” e “view”. Crie também um arquivo chamado “Module.php”, e deixe-o em branco por enquanto. Dentro da pasta “src”, crie outra pasta chamada “Album” (com inicial maiúscula mesmo, por causa do namespace), e dentro desta última pasta, crie outra chamada “Controller”. Dentro da pasta “view”, crie outra pasta chamada “album” (esta com letra minúscula). Para finalizar, crie dentro da pasta “config”, um arquivo chamado “module.config.php”, em branco por enquanto.

Perceba que a estrutura ficará assim:

imagem-estrutura-modulo-album-criado

Por enquanto estes são os diretórios e arquivos que necessitamos. Vamos para a parte mais importante deste processo: A configuração deste módulo.

 

Configurando o Módulo

O primeiro passo é ativar o módulo. No Zend Framework é tudo explícito, portanto se criarmos um módulo, configurarmos o mesmo corretamente e não definir que este módulo está ativo, ele não rodará. Para ativá-lo, abra o arquivo “zf2/config/application.config.php” e adicione o nome do módulo no array lá presente. Veja:

<?php
return array(
    'modules' => array(
        'Application',
        'Album',  // Esta linha foi adicionada para ativar o módulo
    ),
    'module_listener_options' => array(
        'module_paths' => array(
            './module',
            './vendor',
        ),
        'config_glob_paths' => array(
            'config/autoload/{,*.}{global,local}.php',
        ),
    ),
);

Simples, o módulo está ativado perante o framework.

Vamos definir suas configurações internas agora. Abra o arquivo “/zf2/module/Album/config/module.config.php”, e adicione o seguinte código:

<?php
return array(
    'router' => array(
        'routes' => array(
            'album' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/album',
                    'defaults' => array(
                        'controller' => 'Album\Controller\Album',
                        'action'     => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/[:action]',
                            'constraints' => array(
                                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'Album\Controller\Album' => 'Album\Controller\AlbumController',
        ),
    ),
    'view_manager' => array(
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

Para entender o que significa cada parte desse código, veja o post anterior onde explico este arquivo linha a linha (Arquivos de Configuração do Zend Framework 2)
 

Agora abra o arquivo “Module.php” em “zf2/module/Album/” e adicione o seguinte código:

<?php

namespace Album;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }
}

Igualmente, para entender o conteúdo desse arquivo leia o post Arquivos de configuração do Zend Framework 2

Pronto, nosso módulo está com suas configurações básicas setadas. Vamos criar agora nosso primeiro controller.

 

Criando o primeiro controller

Crie, dentro do diretório “zf2/module/Album/src/Album/Controller” um arquivo chamado “AlbumController.php”,e adicione nele o seguinte código:

<?php

namespace Album\Controller;

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

class AlbumController extends AbstractActionController
{
    public function indexAction()
    {
        $texto = "Eu fui definido no controller, mas vou aparecer na view";

        return new ViewModel(array(
            'exemplo' => $texto,
        ));
    }
}

Entenda-o linha a linha:

Linha 3: definimos o namespace. Como tudo fica relativo à primeira pasta dentro do diretório “src/”, basta definirmos “Album\Controller”.

Linha 5 e 6: Duas classes que iremos utilizar no controller, portanto damos um “use” aqui.

Linha 8: crio a classe (obrigatoriomente deve-se terminar o nome da classe com “Controller”, e definir o nome do arquivo da mesma forma), e estendo a mesma com classe do Zend responsável pelos controllers (basta digitar o nome da classe, já que incluímos esta na linha 5 do arquivo)

Linha 10: Para cada action de nosso controller, uma nova função deverá ser definida. Sempre seguida de “Action” no final.

Linha 12: Definimos uma string qualquer na variável $texto.

Linha 14 à 16: Estamos enviando para a camada de visualização a string criada na linha 12.

Vamos ver como isso vai ficar na camada de visualização?

 

Criando a camada de visualização

Agora a coisa ficou mais fácil ainda. Já definimos tudo que precisávamos para fazer o sistema rodar, só queremos ver como imprimir na camada de visualização aquela string criada lá na camada de controle… Isso é mel na chupeta. Vamos lá.

Crie, dentro do diretório “/zf2/module/Album/view/album/” um novo diretório chamado “album”. Esta pasta faz referência ao CONTROLLER “AlbumController”. Isso tem que ficar bem claro para você, caro leitor: se tivéssemos um controller chamado “TesteController”, criaríamos dentro do diretório “album” ou diretório chamado “teste”, sempre em letras minúsculas. Agora dentro do diretório “/zf2/module/Album/view/album/album”, crie um arquivo nomeado “index.phtml

Por sua vez, o arquivo “index.phtml” faz referência à action “indexAction” dentro do controller “AlbumController”. Viu só como a estrutura do Zend Framework 2 é bem organizada? Agora copie o código abaixo para o arquivo “index.phtml”.

<p>Olá, sou a action INDEX.</p>

<!-- A linha abaixo irá imprimir a variável $exemplo -->
<?= $exemplo ?>
<!-- Isto foi definido no controller AlbumController -->

 

Agora acesse em seu navegador a aplicação, com URI “/album” ou “/album/index” e veja seu primeiro trabalho com o Zend Framework 2 em funcionamento!

imagem-modulo-rodando

 

É isso aí, meu amigo… Na primeira vez que executamos todo esse processo, pode parecer um pouco complicado, porém a prática leva a perfeição, portanto treine. Execute este tutorial umas duas ou três vezes e verás que não é tão complicado quanto parece. Perceba também que mantemos o mesmo layout, para não haver necessidade de configurar um novo. Porém é possível definir layouts diferentes para os módulos, inclusive mais de um layout por módulo. É tudo questão de ajuste e configuração.

Desafio: Experimente agora você mesmo criar uma nova action, e fazê-la aparecer na tela. Se estiver a vontade, experimente também criar um novo controller (não esqueça de configurar as rotas e tudo mais) e rode-o. E fique a vontade para comentar também sobre o que achou deste tutorial.

 

Obrigado por me acompanhar em mais esta jornada. Possivelmente no próximo post irei mostrar como trabalhar com consultas sql orientadas à objeto com o Zend Framework 2.

Um forte abraço e até a próxima.


Marcado com: , ,
Publicado em Zend Framework 2
  • daniel

    mto bom !! continue fazendo tutoriais desse tema q estão ajudando bastante

    • http://www.ricardobrusch.com.br Ricardo Brusch

      Agradeço teu comentário Daniel. Pode deixar que na medida do possível eu vou postando outros tutoriais aqui. Porém é importante pra mim saber assuntos que interessam o pessoal que desenvolve também, para poder postar conteúdo relevante para as pesquisas. Fica a vontade para opinar sobre quais assuntos você gostaria de ver tutoriais aqui no blog.

      Um abraço e sucesso!

  • Rafael

    Artigo muito bom. Mas tenho uma duvida! Por exemplo, se eu tenho que construir algo grande, como um intranet? Qual a melhor forma de estruturar isso? Para cada recurso eu tenho que fazer um módulo novo? E se cada recurso tem que se comunicar com o modulo principal? Por ex. usuários, todos os módulos vão ter, necessariamente, acesso aos dados do usuários? Não vai ficar meio bagunçado?

    Vlw, abraços

  • João Masiero

    Excelente, você conseguiu me ensinar algo q estava procurando faz um bom tempo viu, obrigado

Volte Sempre!
Meus artigos te ajudaram de alguma forma e você não sabe como me agradecer? Que tal me pagar uma Coca-Cola bem gelada?

Sobre o autor

Me chamo Ricardo Brusch, sou programador e desenvolvedor de sistemas para internet. Também sou aspirante a escritor, e você pode ler alguns de meus contos malucos em contos.ricardobrusch.com.br.
Parceiros





Publicidade