terça-feira, 3 de fevereiro de 2009

Tradução -Começando com o CodeIgniter parte 1

Saudações a todos!
* Como o blog está somente começando eu ainda não tenho muito o que escrever. Atualmente estou começando a brincar com o CodeIgniter e achei um tutorial introdutório bem legal sobre ele. Ele foi escrito pelo Mike e está publicado no site dele o Capsize Designs. Ele foi bem gentil e permitiu que eu o traduzisse para o português.

CodeIgniter é um "Framework de aplicação web open source que permite você escrever programas PHP que arrebentam." O próprio site diz isso. O CodeIgniter é extravagante. Contudo, sua documentação é muito bom depois que você inicia, mas começar é um pouco difícil. É por isso que estou aqui. Espero que depois deste tutorial, você encontre seu caminho para entender o CodeIgniter e tenha um bom entendimento da arquitetura MVC.

Na parte um nós iremos aprender sobre a instalação e configuração do CI, e também conhecer um pouco sobre a estrutura de diretórios (que sempre parece assustar as pessoas). Então vamos começar.

Um pouco de fundamentos
Para aqueles que não estão familiarizados com frameworks PHP ou o conceito MVC (Modelo, Visualização, Controle) em geral, aqui está uma introdução. MVC é um método testado e genuíno de organizar código fonte e arquivos do programa. Basicamente o MVC separa o código de interface do código da lógica do programa.
O CodeIgniter implementa a arquitetura MVC muito bem, e coloca tudo em toneladas de classes PHP e helpers (arquivos com funções úteis para a aplicação) para ser mais produtivo e rápido. Você tem uma classe de manipulação de imagens na qual você tem acesso a funções para redimensionar, cortar e colocar uma marca d' agua facilmente. Você tem uma classe de captcha que torna bem fácil gerar captchas para formulários web. Você tem até mesmo uma classe de codificação ZIP que torna simples criar pacotes zip dinamicamente no seu site. Eu não ficaria surpreso se o CI 2.0 viesse completo com um uma classe pia_cozinha.php! Ponto final. Isso foi divertido.

Dando uma olhada
Agora vamos uma olhada no CodIgniter para ver com o que estamos lidando. Faça o download da versão mais nova do site do CI e descompacte o arquivo em algum lugar do seu servidor. Abra o diretório no seu gerenciador de arquivos e dê uma olhada.
Você deve ver quatro coisas: A pasta "system" (que contém praticamente TUDO, incluindo o código fonte do CI e as pastas para você colocar seu código), uma pasta user_guide (guia de usuário que você pode excluir porque tem tudo no site do CI), um arquivo license.txt, e um arquivo index.php (o qual roteia cada requisição para qualquer lugar que ela precise ir).

Abra a pasta system. Você vê a pasta "application"? Este é seu lar. Não toque em nenhuma das outras pastas a menos que você esteja querendo saber como as coisas funcionam. Ou melhor, nem mesmo faça isso. Dá medo. Somente abra a pasta application. Você vai ver algumas pastas aí dentro. No começo, as únicas pastas com as quais você vai se preocupar são, config, models, views e controllers. Quando você melhorar no desenvolvimento com o CI, talvez você queira desenvolver suas próprias bibliotecas ou helpers que vão ficar nas suas pastas apropriadas, mas espere um pouco! Paciência é a chave! CHAVE!!!

Configuração e instalação
A primeira pasta que iremos olhar é a config. Especificamente, nós vamos mexer com o config.php, autoload.php, e database.php. Abra o config.php e dê uma olhada. Este é o principal lugar para brincar com as opções que o CI oferece. Antes de tudo, mude o valor de $config['base_url'] para o local que sua instalação do CI está. Se você está rodando no localhost e colocou em uma pasta chamada "ci", por exemplo, você colocará "http://localhost/ci/". Se está em um servidor online, vai ficar mais ou menos assim "http://www.seustie.com/seu_diretorio_ci". Seja lá o que você colocar, TENHA CERTEZA de incluir a barra(/) depois do nome do diretório, e tenha TENHA CERTEZA de incluir o "http://".

Continuando, nós veremos que $config['index_page'] está setado para "index.php". Está ok por agora, porque por padrão o CodeIgniter roteia tudo através da página index.php na rota do documento. Isto significa que suas urls ficarão parecidas com "www.seusite.com/index.php/alguma_pagina". Se você quiser tirar o index.php do endereço (Eu sempre tiro! Fica feio!), você pode mudar a configuração $config['index_page'] para uma string vazia (somente duas aspas sem nada entre elas para aqueles que nunca programaram antes) ao invés de "index.php" e faça um arquivo .htaccess para remover isso da url como o wiki do CI ensina.

Vá para $config['log_threshold'] = 0, e mude para 1. Isso permite que mensagens de erro (como mensagens do PHP ) vão para o log. Qualquer coisa menor do que 1 e você não verá nenhum log, qualquer coisa maior do que 1 e seus arquivos de log vão aumentar sem piedade. Então, fique com 1. É uma boa prática.

ATUALIZAÇÃO: Aparentemente alguns servidores teem problemas setando log_threshold para 1, então se você só ver páginas em branco depois da instalação, mude para 0 e veja se funciona. Se alguém puder explicar isso, por favor me avise.

ATUALIZAÇÃO 2: Graças a cheekygeek (nos comentários do artigo original, link no início do texto), nós temos a resposta
"Uma solução para o problema do log_threshold é permitir a escrita na pasta system/logs. Contudo, deixar pastas na web com permissão de escrita(777) nunca é uma boa ideia... A solução mais segura em um sistema compatível com linux é dar a permissão de grupo dos arquivos de log para o usuário do servidor web. Se você estiver usando o Apache, você verá isso definido no arquivo httpd.conf."

Obrigado pela informação, cheekygeek!

De volta ao principal, vá em frente e mude a chave encriptação ($config['encryption_key']) para uma sequência randômica de 32 caracteres alfa-numéricos. Muitas aplicações que usam autenticação ou trabalham com senhas usam a chave de encriptação colocando ela no final da senha (chamam isso de sal) e então criam um hash disso para segurança. Isso faz o armazenamento de senhas um pouco mais seguro.

Agora vamos sair do config.php e iremos para o database.php, também na pasta config. Se sua aplicação não vai usar um banco de dados, você não precisa mexer neste arquivo. A maioria dos usuários irão somente mudar as primeiras quatro opções das opções de banco de dados (hostname, username, password, database). Se você não estiver usando MySQL, você terá que mudar a opção dbdriver, e se você estiver prefixando todas suas tabelas com algo, você terá que mudar o dbprefix. Todo o resto deve estar correto.

Finalmente, nós vamos abrir o autoload.php. Este arquivo basicamente diz para o CI quais dos helpers e bibliotecas você gostaria de carregar automaticamente. Helpers e bibliotecas podem ser carregados em um controlador pelo próprio controlador, mas se tiver algum que você irá usar a maioria dos controladores, você pode simplesmente auto carregá-lo. Se você está usando um banco de dados, você deveria auto-carregar "database" na seção de bibliotecas. Eu geralmente auto-carrego "url" na seção de helper. Visite o guia de usuário do CodeIgniter para ver o que isto tudo faz. Você provavelmente vai precisar despender algum tempo familiarizando-se com tudo isso para tirar total proveito do CI. NOTA: No topo da página do Guia do usuário, tem um pequeno botão chamado "Conteúdo" que revela um menu de navegação deslizante. Estou falando disso porque fiquei duas semanas martelando minha cabeça até eu achar este menu.

Agora abra seu browser, navegue para onde você instalou o CI com o index.php no final (algo como http://localhost/ci/index.php). NOTA: Se você usou o arquivo .htaccess para retirar o index.php da url, você obviamente não precisará colocá-lo no endereço. Você está vendo a página de bem vindo? Se está, você está dominando o CI! Como é bom esta sensação! SIMMMM! Se não está, coloque um comentário aqui ou mande uma mensagem para os ótimos fóruns do CodeIgniter e não deve ser muito difícil para descobrir o que está errado.

Por padrão, o CI carrega o controlador "welcome.php". Para mudar para sua própria página, abra o "routes.php" na pasta de configuração e mude o controlador padrão. Nós vamos falar mais sobre controladores (e modelos e visualizações também!) na próxima parte, fique ligado.

Nenhum comentário:

Postar um comentário