Estrutura do Zend Framework 2

estrutura-zend-frameowrk-2-ricardo-brusch

Olá, bravos guerreiros PHP. O post que escrevo hoje tem como principal objetivo fazer com que você fique por dentro da estrutura do Zend Framework 2, para mais adiante começar a criar suas aplicações sobre esta plataforma. Se você ainda não tem a base do Zend Framework rodando em seu servidor local, não continue a leitura sem antes dar uma olhada no post “Rodar o Zend Framework pela primeira vez”.

 

Vamos analisar então a estrutura de pastas do ZF2 e ver como elas influenciam na sua aplicação.

 

esqueleto-zend-framework-2

Esqueleto do diretório raiz

Acessando o diretório raiz, além dos arquivos do composer e do autoloader, temos os seguintes diretórios:

– config
– data
– module
– public
– vendor

 

Não entrarei em detalhes sobre os arquivos que cada diretório possui. Tentarei apenas descrever a função de cada diretório na organização proposta pela Zend. Veja os diretórios:

– config: este diretório já se auto-explica. Aqui ficam configurações da aplicação como um todo. Dentro deste ainda temos uma outra pastinha, “autoload”, onde é sugerido que fiquem arquivos com configurações globais (production) e locais (development). Se você utiliza o Git, por padrão nenhum arquivo (nesta pasta) que termine com “.local.php” será sincronizado em seus commits.

 

– data: Aqui você pode armazenar os seus arquivos que não fazem parte do código da aplicação, mas sim outros relativos ao projeto, como diagramas, dumps do banco de dados, etc…

 

– vendor: diretório dedicado à bibliotecas de terceiros. Se você for utilizar o Bootstrap, Jquery, Bibliotecas para envio de e-mail ou qualquer outra, esta é a pasta onde elas devem ficar. Perceba a existência do Composer e do Zend já por ali…

 

– public: o Zend Framework trabalha com FrontController, ou seja, tudo que você acessar, estará acessando através de um caminho apenas. É aqui, e somente aqui, que os usuários de suas aplicação terão acesso. As suas imagens, arquivos CSS e JS entre outros devem ficar aqui neste diretório. A organização e distribuição dos arquivos dentro deste diretório fica por sua conta.

 

– module: O diretório onde ficam os módulos de sua aplicação. O Zend Framework, já em sua primeira versão, tinha como objetivo ser modular. Porém, devido à diversos fatores (da própria Zend e também dos programadores que utilizavam o framework), essa estrutura modular nunca foi bem aproveitada. A partir da versão 2, o Zend Framework deixou bem claro que ele deveria ser implementado por módulos dentro da aplicação, e isso vem sendo respeitado à risca. Aí você se pergunta: “minha aplicação é pequena, se usar o ZF vou criar apenas um módulo. Vale a pena eu utilizá-lo?” A resposta mais rápida seria “SIM!”, pois com esta arquitetura, se sua aplicação precisar expandir, você terá total liberdade dentro da mesma estrutura para implementar o crescimento dela. A pergunta ideal neste caso seria: “Não acho que conseguiria aproveitar os recursos do ZF, sendo que vou criar uma aplicação bem simples, sem intenção de expandi-la. Devo usar o ZF neste caso?” Aí sim, a resposta mais correta seria negativa. Não deve-se utilizar o framework apenas porque ele existe. A implementação de códigos avançados com ele se torna bem mais simples, porém para implementar coisas básicas o trabalho que se tem para configurar e montar a estrutura as vezes não compensa. Lembro-me sempre do que disse meu amigo desenvolvedor Wilson Corleto: “Usar uma tecnologia só porque ela existe é a receita para o fracasso!

 

mergulhando-zend-framework-2

Indo mais fundo na Estrutura do ZF

 

Bom, até agora você já tem uma prévia da estrutura inicial do Zend Framework 2. Vamos entrar na pasta “module” neste momento. Este é o principal diretório da sua aplicação. É aqui que vão ficar os módulos que você vai desenvolvendo. Observe a estrutura já existente aqui:

Veja a estrutura da pasta "module"

Veja a estrutura da pasta “module”

 

Ficou com medo agora? Espero que não, por quê vai piorar… hehehe bricandeira aew pessoal, só pra descontrair um pouco. A estrutura é complicada de ser interpretada num primeiro momento, mas vamos navegar por ela passo a passo e você vai ver que ela é bem organizada.

 

Comecemos então pela pasta Application. As pastas neste nível são os módulos de sua aplicação. O nome do módulo deverá ser atribuído ao diretório. Para cada novo módulo, um novo diretório deve ser criado. Simples assim. Aprofundemos agora neste módulo base disponibilizado pela Zend…

Dentro da Application, temos três diretórios principais: “config”, “src” e “view”. Entenda cada uma delas:

 

Application/config

Aqui ficam os arquivos de configuração independentes deste módulo. Perceba que o Zend trabalhou bem esta questão, já que há um diretório mais acima com configurações gerais para a aplicação, e este onde ficam configurações específicas do módulo “Application”.

 

Application/src

Aqui ficam os códigos da sua aplicação. Repare que há dentro deste diretório um novo diretório com o nome “Application”. Isso se dá por causa dos namespaces. Dentro de um módulo (Application), podemos ter diversos namespaces (Application/src/Application, Application/src/Modelo, e por aí vai…). Não considere isto sub-módulos, mas sim uma melhor forma de organizar seus códigos.

Dentro do diretório Application/src/Application, perceba a existência da pasta “Controller”. Aí ficam os controllers (oohhh!!!!). No mesmo nível do diretório “Controller”, ficaria o diretório “Model”, para os arquivos que tratam as tabelas de seu banco de dados. Nesta base do ZF, por fins didáticos, isto não foi implementado.

 

Application/view

O ZF trabalha em camadas (arquitetura MVC). Aqui nesta pasta ficam apenas os arquivos da camada de visualização de dados. Veja que logo abaixo de “view” temos um diretório “application”. Ela faz referência ao namespace “Application” dentro da pasta “src”. Conforme o exemplo dado logo mais acima, teríamos também neste nível um diretório chamado “modelo”.

Dentro de “application” temos outro diretório chamado “index” e dentro dele um arquivo chamado “index.phtml”. Explicando: O diretório “index” é referente ao controller “IndexController” (neste caso, se tivéssemos um controller chamado “TesteController”, o diretório neste nível se chamaria “teste”) e o arquivo “index.phtml” é referente à action “indexAction” dentro do Controller. A extensão “.phtml” é padrão no Zend Framework.

No mesmo nível de “application” também temos as pastas “error” e “layout”. A primeira é auto-explicativa, possui arquivos para apresentar os erros durante a execução e também erros de página não encontrada (404). A segunda possui o layout de sua aplicação. O cabeçalho, rodapé e tudo que for padrão em todas as páginas de sua aplicação são definidos neste arquivo. O Zend Framework é bem flexível quanto à isso, já que permite a criação de diversos layouts para cada módulo, e também permite desabilitar o layout em qualquer parte isolada da aplicação.

 

O Coração do Módulo

O arquivo “Module.php” aparece então para fechar essa estrutura. Ele fica dentro do diretório do módulo “Application”, e possui a responsabilidade de controlar o módulo em questão. Ele funciona como um “front controller” para o módulo. Antes de fazer qualquer coisa neste módulo, o Zend dá uma passadinha pelo “Module.php”.

 

Finalizando

É, eu sei, foi muita informação de uma vez só. Olhando assim o texto, mesmo não sendo muito extenso, percebe-se que há bastante informação à ser assimilada aí. Este texto inteiro foi de autoria minha, e infelizmente não consegui encontrar fontes confiáveis para poder basear minha escrita. Se você já trabalha com Zend Framework 2 e tem uma visão diferente de algum desses diretórios, por favor comente logo aí abaixo sua opinião. O objetivo é levar conteúdo de qualidade ao programador que quer trabalhar com o ZF, e só conseguimos isso com debates construtivos e troca de ideias!

fim-tutorial-estrutura-zend-framework

Agradeço mais uma vez pela paciência dos amigos em acompanhar mais este artigo. Pretendo em breve escrever outro artigo, só que desta vez criando um novo módulo, controllers e actions, definindo um layout e trabalhando com banco de dados de uma maneira totalmente orientada a objetos (sem utilizar a camada Model e muito menos o Doctrine). Este post provavelmente será divido em partes, mas fique de olho pois em breve estarei lançando-as por aqui!

Um forte abraço à todos, em especial à minha querida esposa Rita Rizzieri, que me atura enquanto eu escrevo esses posts ou tenho novas ideias, e sempre ela é a primeira a ser consultada… hehehehe

 

Bom código e muito café à todos!


Marcado com: , ,
Publicado em Zend Framework 2
  • Raoni Sporteman

    Obrigado pelo artigo! esclareceu muitas dúvidas que estavam matutando minha cabeça a dias.

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

      Eu que agradeço teu comentário, Raoni! Se precisar de apoio na tua jornada com o Zend 2, pode contar comigo. Sucesso!

  • Alefe Variani

    Muito bom o post Parabéns, vale lembrar também que o diretório /data serve para armazenar aquivos de cache e um modulo é um conjunto de códigos que mantem uma estrutura MVC para resolver um problema em especifico.
    Um dúvida, depois de ele sair do config/application.config.php onde são definido os módulos da aplicação, como ele vai parar no Module.php no modulo ? pois só apartir dai ele vai para no /config/module.config.php onde exitem as rotas e tals.

    Vlw, Abraço.

  • Vitor

    Muito Foda! 😀

  • Rafael Grube

    Muito bem explicado. Parabéns

  • Rodrigo Silva

    Amigão, sugiro que faça um tutorial ensinando como implementar o recaptcha da google com o zf2 , procurei na internet e tem pouca coisa falando sobre esse assunto. Um grande abraço!

  • Edily Cesar Medule

    Parabéns pela didática meu caro!
    Gostaria de saber sua opinião sobre onde deixar aquelas classes que usamos corriqueiramente para resolver problemas pequenos (ex: uma classe que manipula datas). Ter um modulo pra todas elas, faz sentido?

    • Ricardo Brusch

      Buenas, Edily! Obrigado pelo feedback!

      Por padrão, temos o módulo Application no esqueleto do ZF2. Crio aqui dentro, em “src > Application”, uma pastinha “Library”. Dentro dela organizo minhas classes usadas frequentemente. Pode-se criar, para uma melhor organização, pastas para separar as classes por responsabilidades como “Data”, “String”, etc… Isso é bastante flexível, pois com a utilização dos namespaces podes acessar facilmente qualquer arquivo em qualquer nível.

      Por exemplo, para uma classe de limpeza e padronização de strings, pense em algo como: Application > src > Application > Library > String > SanitizeHelper.php

      Classes de uso global coloco no módulo Application. Classes de uso específico em algum módulo, crio a mesma estrutura só que dentro do respectivo módulo.

      Este é o padrão que criei, sigo e indico. Até o momento sempre tive boa aceitação quando apresento meu modelo de organização. Fique a vontade para aplicar e modificar, de acordo com sua necessidade!

      Forte abraço me mantenha informado do teu progresso =D

      • Edily Cesar Medule

        Excelente organização meu caro, faz bastante sentido, passarei a usá-la.
        Obrigado por compartilhar essa experiência.

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