Estrutura de diretórios: organização de pastas do CodeIgniter

16 de novembro de 2009, em Passos Iniciais, por Tárcio Zemel

Estrutura de diretórios do CodeIgniter

Estrutura de diretórios do CodeIgniter

Não dá pra trabalhar com o CodeIgniter sem conhecer sua estrutura de diretórios. É conhecendo como é a organização das pastas no CodeIgniter e sabendo sua função dentro do “todo” do framework que é possível mexer no CI com eficiência e consciência – também é importantíssimo conhecer o Fluxograma de Dados do CodeIgniter (se ainda não leu o artigo, leia antes de continuar).

Com um pouco mais de experiência é possível alterar a estrutura de diretórios do CodeIgniter, mas, para fins didáticos, será mostrada no tutorial a estrutura padrão de pastas do CI – dentro do momento histórico da atual versão do framework, CodeIgniter 1.7.2.

Não serão detalhadas as funções/possibilidades completas de cada pasta e seus respectivos arquivos; isso será feito, com o tempo, na medida em que novos artigos são publicados no blog. Portanto, não é preciso ficar frustrado caso encontre termos que ainda desconhece; assine o feed do CodeIgniter Brasil para não perder as atualizações.  ;-)

Visão geral da estrutura de pastas do CodeIgniter

Como pode ser visto na imagem da estrutura de pastas acima, na raiz da estrutura do CodeIgniter existem 2 diretórios e 2 arquivos.

Diretórios

Os 2 diretórios existentes na raiz da estrutura do CodeIgniter são:

  • system. Local onde os códigos das aplicações/softwares desenvolvidos ficam.
  • user_guide. Contém o Guia do Usuário (User Guide) do CodeIgniter (cópia da documentação online).

Arquivos

Juntamente com os diretórios supracitados, na raiz do esquema de diretórios do CodeIgniter existem 2 arquivos:

system

Na pasta system toda a “ação” do CI acontece. Para organizar a estrutura presente, há subpastas para segmentar e organizar os arquivos e fluxo de trabalho.

  • application. Pasta onde os arquivos do aplicativo desenvolvido ficam. Praticamente toda a codificação em CI fica nesta pasta, que abriga seus models, views, controllers e outros que ainda serão tratados no blog.
  • cache. No CodeIgniter existem maneiras de trabalhar com cache para servir aplicativos mais rápidos e robustos para quem os utilizam. É nesta pasta que arquivos condizentes ao cache feito são armazenados.
  • codeigniter. Os arquivos de core ficam aqui. É nesta pasta que está o “coração” do CodeIgniter. Raramente é preciso mexer em algo nesta pasta, já que todo o desenvolvimento do software se dá na pasta “application”.
  • database. Contém os core files (drivers e outras coisas) para trabalhar com bancos de dados. Assim como a pasta “codeigniter”, raramente será preciso mexer nela.
  • fonts. Basicamente, esta pasta é para armazenar as fontes que podem ser usadas pela biblioteca de manipulação de imagens (que também será vista em outro momento aqui no CodeIgniter Brasil).
  • helpers. Pasta que contém os helpers nativos do Code Igniter (para mexer com arrays, cookies, diretórios, e-mails, formulários e muitos outros).
  • language. Contém arquivos de idioma (que são usados principalmente para mensagens das libraries e helpers).
  • libraries. Pasta de armazenagem das libraries (bibliotecas) padrão do CI para códigos envolvendo e-mails, calendários, upload de arquivos e mais.
  • logs. Como sugere o nome, esta pasta armazena todos os logs gerados pelo CodeIgniter.
  • plugins. Contém os plugins default do CodeIgniter. Veremos com mais detalhes futuramente, mas a diferença básica entre helpers e plugins é que os plugins possuem somente 1 função (e geralmente são feitos com intenção de serem compartilhados com a comunidade CI).
  • scaffolding. Contém os arquivos necessários para se trabalhar com scaffolding no CodeIgniter. Se ainda não sabe o que é isso, não se preocupe, ainda vamos abordar o scaffolding (e, temos certeza, você vai se surpreender).

system/application

Sem dúvidas, a pasta system/application é a mais importante para o desenvolvimento dos aplicativos e é a que mais vai exigir sua atenção/codificação. Já que a maior parte do seu trabalho vai ser aqui, é importante conhecer bem a estrutura de subdiretórios da pasta “application”:

  • config. Contém diversos (e importantes) arquivos relacionados a configurações de seu CI. São arquivos de configuração de database, variáveis sobre URL, quais libraries e helpers serão carregados automaticamente e muitas outras coisas.
  • controllers. Armazena os controllers que você cria para o seu software.
  • errors. Vem com os templates de páginas de erros do CodeIgniter (erros genéricos, 404, conexão ao banco de dados, etc). É conveniente que tudo isso seja alterado para que os erros do aplicativo fiquem personalizados e consonantes com a finalidade deste.
  • helpers. Para armazenar todos os helpers que você venha a criar/aprimorar.
  • hooks. Para colocar os hooks que você cria. Em artigos futuros será mostrado que hooks são a maneira mais rápida e segura de você extender o core do CodeIgniter (geralmente feito por usuários avançados).
  • language. Para aplicativos multi-idioma, esta pasta é bem usada por armazenar as mensagens nas diferentes escritas.
  • libraries. Aqui ficam as libraries personalizadas, com funcionalidades para o programa a ser criado. Perceba que há diferença entre as pastas system/libraries e system/application/libraries.
  • models. Armazena os models que você cria para seu aplicativo.
  • views. Armazena os views que você cria para seu programa.
Todos os seus projetos terão imagens, folhas de estilo, javascript e outros arquivos necessários. Evidentemente será preciso pastas para organizar tudo isso. Existe uma técnica que preconiza que a melhor maneira para organizar isso é fazer pastas na raiz da instalação do CodeIgniter – ou seja, no mesmo nível hierárquico da pasta system. Mas, para se fazer isso, é preciso utilizar um .htaccess com algumas poucas linhas para que o CodeIgniter reconheça as novas pastas:

1
2
3
RewriteEngine on
RewriteCond $1 !^(index\.php|img|css|js)
RewriteRule ^(.*)$ /index.php/$1 [L]

Basicamente as instruções fazem com que o CI reconheça as pastas “img”, “css”, “js” e, de quebra, ainda retiram “index.php” do URL (algo que será explicado em um momento mais oportuno).

O importante é a função de cada pasta

Principalmente quando se está começando, é bastante comum ficar em dúvida sobre a função de cada diretório e ter receio de criar arquivos no lugar errado. Estudando a estrutura de pastas do CodeIgniter, certamente esse não será um problema que irá travar seu processo de desenvolvimento.

O CodeIgniter foi projetado para manter seguros seus arquivos de core e é por uma razão que existe uma pasta específica para você criar os arquivos de seu software. Você deve concentrar seus arquivos em system/application, criando arquivos nos diretórios adequados – conforme foi abordado neste artigo – e somente criar/alterar arquivos de outras pastas caso você saiba exatamente o que está fazendo (e tenha um bom motivo pra isso).

config folder  contains several important files that control your configuration
options. There are files that manage your database setup and other variables that CodeIgniter
needs to know about (such as the base URL, which libraries and helpers to autoload, etc.)

Instalação e configuração inicial do CodeIgniter

6 de outubro de 2009, em Passos Iniciais, por Tárcio Zemel

Depois de uma boa carga teórica (mas não pensem que terminou), vamos começar com um pouco de prática e aprender como instalar o CodeIgniter. A instalação do CI, como já comentado no artigo CodeIgniter: Requisitos de Servidor e Licença de Uso, é bem simples.

Baixando o CodeIgniter

Como já deve ser do conhecimento de quem está acompanhando o blog (se você ainda não está, assine o feed do CodeIgniter Brasil), o CodeIgniter, como bom framework PHP que é, não necessita ser instalado da forma “tradicional”, como se instala um programa desktop, por exemplo. Sua instalação consiste, basicamente, em extrair os arquivos que compõem o framework em algum servidor web (pode ser local, mesmo), configurar um banco de dados e começar a brincadeira.

No site oficial do CodeIgniter podemos encontrar o link para fazer o download da última versão do CodeIgniter. Não precisa se preocupar com o link porque sempre que uma nova versão estável é disponibilizada, ela automaticamente fica acessível através do endereço “http://codeigniter.com/download.php”. Bem prático!

Ah, e não se esqueça de já reservar um banco de dados especialmente para você trabalhar com o CodeIgniter! Já, já, você vai ver que, só para começar, é preciso configurar as informações de acesso ao BD.

Instalação  do CodeIgniter

Em alguns momentos para a instalação básica do CodeIgniter será preciso alterar algumas variáveis em arquivos específicos. Apesar do tamanho dos arquivos e relativa complexidade, não é preciso se preocupar. Além de os core files do CodeIgniter serem muito bem comentados, ainda abordaremos no CodeIgniter Brasil muito sobre os arquivos de configuração. Portanto, relaxe!  ;-)

Para instalar o CodeIgniter, basta seguir os seguintes passos:

  • Descompacte a estrutura de diretórios presente no arquivo zipado que você baixou;
  • Faça upload de toda a estrutura para o servidor que vai trabalhar (se for trabalhar com localhost, basta mover, claro);
  • Abra o arquivo application/config/config.php com seu editor de códigos e especifique qual vai ser sua URL base (alterando o valor de $config['base_url'] com o que vai ser sua “base” de trabalho com o CI);
  • Para a configuração do banco de dados, abra application/config/database.php e altere as variáveis com suas informações de conexão – é bem simples e intuitivo; se você fez uma conexão em PHP puro alguma vez na sua vida, nenhuma novidade.

E é isso! A essa altura seu CodeIgniter já está instalado, basicamente configurado e pronto para o uso!

Atualizando o CodeIgniter

Para saber qual a versão mais atual do CodeIgniter, basta checar o site oficial do CodeIgniter. Se você já mexe com CodeIgniter usando uma versão antiga e quer atualizar, não se preocupe: é possível manter a integridade de seu aplicativo e atualizar de forma rápida e simples o core do framework.

Há uma página com o histórico, especificações e intruções de atualização das várias versões do CI. Geralmente a atualização se limita a substituir algumas pastas e realizar alterações leves em alguns poucos arquivos. Então, já sabe: sempre que uma nova versão do CodeIgniter for liberada, não se esqueça de atualizar suas aplicações seguindo as instruções de “Upgrading From a Previous Version“.

Dica de segurança

Se você desejar aumentar a segurança de sua instalação, é possível “camuflar” a localização dos arquivos de seu CI renomeando a pasta system para algo de sua preferência. Se optar por isso – o que, geralmente, é uma boa pedida de segurança – você deve abrir o arquivo index.php (localizado na raiz do CodeIgniter) e alterar a variável $system_folder com o nome que você escolheu.

Ainda comentaremos bastante sobre a estrutura do CodeIgniter, configurações, diretivas e várias outras coisas. Por enquanto, é isso, mas fique ligado no CodeIgniter Brasil para acompanhar as novidades!

Fluxograma de Dados do CodeIgniter: como tudo funciona

10 de julho de 2009, em Passos Iniciais, por Tárcio Zemel

Agora chegamos a um ponto que estamos quase “metendo a mão na massa”. Continuando com as postagens “pense primeiro, escreva depois”, apresentamos o Fluxograma (Flow Chart) de Dados do CodeIgniter.

É muito, muito importante, mesmo, entender como é o fluxo de dados dentro de um software para se poder aplicar os conhecimentos em cima. Entender por onde os dados “passam” no CodeIgniter é essencial! Sem isso o máximo que conseguiríamos e realizar algumas funções e códigos mecanicamente, sem entender o mínimo do que realmente está se passando no background.

Bem, esse é o fluxograma:

CodeIgniter - Fluxograma de Dados

Fluxograma de Dados do CodeIgniter (clique para ampliar)

Olhando o fluxograma do CodeIgniter, num primeiro momento pode parecer um pouco estranho ou confuso. Mas, mesmo para os que ainda não estão habituados a frameworks e terminologias como “Libraries” e “Helpers” (e que ainda não tenhamos explicado sobre estes), basta “seguir as setinhas” para entender como a coisa toda funciona!  :-)

“Seguindo as setinhas”

Então, vamos ao acompanhamento de um fluxo básico, numa aplicação “normal” no CodeIgniter:

  1. O index.php serve como “controlador principal”, inicializando os recursos necessários para executar o CodeIgniter;
  2. O “roteador” (Routing) examina o pedido HTTP para determinar o que deve ser feito;
  3. Se existe algo em cache, isso é enviado diretamente ao browser, “contornando” o sistema normal execução;
  4. Antes de o Controller da aplicação ser carregado, a requisição HTTP e qualquer dado submetido pelo usuário são filtrados por motivo de segurança;
  5. O Controller carrega o Model, Libraries, Plugins, Helpers e quaisquer outros recursos necessários para a requisição;
  6. O(s) View(s) é(são) finalizado(s) e enviado(s) para ser(em) renderizado(s) pelo navegador – se o cache estiver ativado, o View é  “cacheado” primeiro, de forma que possa ser apresentado em pedidos subsequentes.

Como já citado, não é preciso se preocupar tanto (neste momento) com determinadas nomenclaturas desconhecidas – e lembre-se das explicações sobre MVC (Model, View, Controller). Basta saber que é assim o funcionando “normal” do CodeIgniter para, em momentos futuros, saber com mais facilidade/tranquilidade onde “intervir” para conseguir o(s) resultado(s) que se prentende.

Bem tranquilo… Por enquanto!  ;-)