O documento discute o framework PHP CodeIgniter. Ele fornece uma estrutura leve e flexível para desenvolvimento web com foco em performance, baixo acoplamento e simplicidade. CodeIgniter usa arquitetura MVC, URLs amigáveis e diversos recursos como acesso a banco de dados e envio de email.
2. Framework
Oferece uma arquitetura que pode ser usada
em várias aplicações.
Toda aplicação tem um conjunto de
características básicas em comum, que
terminam sendo copiadas para a criação de
novos códigos.
Um framework é projetado para prover uma
estrutura para esses elementos comuns.
8. Histórico
Criado por Rick Ellis que é CEO da empresa EllisLab.
Foi escrito com foco em performance de aplicações reais,
com muitas bibliotecas de classes, helpers e subsistemas
emprestados do código-base do CMS ExpressionEngine.
Atualmente é desenvolvido e mantido pela equipe de
desenvolvimento do ExpressionEngine.
Inspirado e grato ao Ruby on Rails por popularizar o uso
de frameworks na Web.
9. Características
Compatível com PHP 5.1.6 ou superior;
Leve e não ocupa muito espaço
Versão 2.1.4 (08 / 07 / 2013):
2,19 MB compactado, incluindo a documentação
1,29 MB descompactado e sem a documentação
Excelente perfomance entre os frameworks PHP;
Quase nenhuma configuração;
Não exige uso da linha de comando;
Bastante flexível;
Simples e de rápido aprendizado;
Documentação clara e completa, inclusive em português.
10. Características
Bancos de dados suportados:
MySQL (4.1 ou superior), MySQLi, MS SQL, Postgres,
Oracle, SQLite e ODBC.
Software Livre sob uma licença de código aberto no
estilo da Apache/BSD.
O sistema básico é enxuto e bem rápido.
Bibliotecas adicionais só são carregadas
dinamicamente sob demanda.
Usa a abordagem MVC, que permite ótima separação
entre a lógica a apresentação.
11. Características
Usa URLs limpas e amigáveis baseada em
segmentos;
Vem com vasta biblioteca para desenvolvimento
web: acesso a um banco de dados, envio de e-mail,
validação de dados, controle de sessões,
manipulação de imagens, etc.
Tem uma grande comunidade de usuários.
12. Visão Geral
É um framework Web
É software livre (licença Apache/BSD)
Leve, pequeno e rápido
Usa abordagem MVC
Permite o uso de URLs limpas
Ex: example.com/news/article/345
Já vem com bibliotecas para permitir acesso a banco de
dados, envio de email, validação de dados, manipulação de
sessão, manipulação de imagens, ...
Facilmente extensível.
Não requer “template engine”, embora venha com uma
simples.
É bem documentado, inclusive o código fonte.
Comunidade grande e ativa.
13. Recursos nativos
Calendários. Fácil criação de calendários, inclusive com criação de
templates de formatação e exibição.
Bancos de dados. De maneira simples e rápida é possível: carregar
databases, executar querys, manipular resultados de consultas, realizar
transações (como se fosse PDO), fazer query caching, dentre outros.
E-mails. Enviar e-mails em protocolos diferentes (Mail, Sendmail e SMTP),
envio de cópias e cópias ocultas, e-mail em texto puro ou HTML, enviar e-
mail com anexos, ferramenta própria para debug, dentre outros.
Criptografia. Funções gerais de criptografia, através do uso de hashings e
chaves.
Formulários. Criação de tags de formulário “on the fly“, tratamento de
campos e informações, upload de arquivos, etc.
Manipulação de imagens. Redimensionar, criar miniaturas, rotacionar,
cortar e inserir marca d’água.
14. Recursos nativos
FTP. Funções gerais de FTP, como mover, renomear, deletar, etc; e
ainda uma função especial de espelhagem (”mirroring“), que permite
criação dinâmica de diretórios no servidor a partir de arquivos na
máquina local.
Compactação de arquivos. Manipulação, criação, controle e
edição de arquivos compactados, sendo possível criar arquivos
diretamente no servidor, acrescentar files diretamente e fazer
downloads dos mesmos.
Controle de cookies sessões PHP. Manipulação e controle geral
de cookies e sessões PHP, com todas suas funções, capacidades e
potencialidades existentes.
Muitas outras funcionalidades.
18. Arquitetura MVC
Modelos para toda a interação com banco de
dados;
Visões para todas as apresentações e
saídas;
Controladores para processar a requisição
HTTP e gerar a página web. Serve de
intermediário entre o modelo e a visão.
19. MVC – Vantagens
Tarefas repetitivas podem ser separadas,
facilitando a manutenção, entendimento,
alterações, descoberta de erros e bugs,
divisão de tarefas, etc.
20. Instalação
Baixe o CodeIgniter em:
http://codeigniter.com/download.php
Descompacte-o na pasta htdocs/www e renomeie o
diretório para o nome mais adequado para sua
aplicação.
Abra o arquivo application/config/config.php em um
editor de textos e altere a sua URL base.
Para usar banco de dados, abra o arquivo
application/config/database.php em um editor de
textos e altere as configurações do seu banco.
21. Estrutura de Diretórios internos ao
diretório system
application – nossa aplicação fica aqui.
cache – arquivos em cache.
codeigniter – o framework fica aqui.
database – componentes para acesso à banco de dados.
fonts –
helpers – classes auxiliares
language –
libraries – bibliotecas do CodeIgniter
logs – arquivos de log
plugins – extensões de terceiros
22. Estrutura de Diretórios
No diretório application temos :
config: Arquivos de configuração
controllers: controladores
errors:
helpers: classes auxiliares, utilitárias, etc.
hooks:
language:
libraries: bibliotecas personalizadas
models: modelos
views: visões
23. Material em português
Guia do usuário (versão antiga em português):
http://www.plasmadesign.com.br/codeigniter/user_guide-pt_BR/
Artigos e tutoriais
http://codeigniterbrasil.com/
Vídeos (screencasts):
Curso de CodeIgniter para iniciantes
https://www.youtube.com/playlist?list=PLInBAd9OZCzz2vtRFDwum0OyUmJg8UqDV
#DevCast - 07 - Introdução ao CodeIgniter
https://www.youtube.com/watch?v=toLEaCbaglc
24. Fluxo do CodeIgniter
1. O index.php serve como controlador primário, iniciando os recursos básicos.
2. O roteador examina a requisição HTTP para determinar o que deve ser feito com ela.
3. Se já existe o arquivo em cache, ele é devolvido diretamente ao browser.
4. Antes do controller ser carregado, a requisição HTTP e qualquer dado submetido pelo
usuário é filtrado por segurança.
5. O Controller carrega o Model, as bibliotecas principais, plugins, assistentes e qualquer
outro recurso necessário para processar a requisição.
6. A View finalizada é gerada e enviada ao browser. Se o cache está habilitado, a view é
gravada no cache para que seja servida em requisições subseqüentes.
26. Projeto e arquitetura
Objetivos principais: máximo desempenho,
capacidade e flexibilidade empacotado da
forma mais leve e menor possível.
Objetivos arquiteturais:
Instanciação dinâmica
Componentes só são carregados quando requisitados.
Baixo acoplamento
Independência entre os componentes para maior reuso
e flexibilidade.
Singularidade dos componentes
Componentes com propósito único e bem definido.
27. URLs amigáveis
URLs são projetadas para serem amigáveis aos
motores de busca e ao ser humano.
No lugar de usar a abordagem padrão "query string", o
Code Igniter usa a abordagem baseada em segmentos:
www.seu-site.com/noticias/artigos/meu_artigo
28. URLs amigáveis
Os seguimentos da URL geralmente representam:
www.seu-site.com/classe/metodo/id
O primeiro segmento representa a classe controller que será
invocada.
O segundo segmento representa o método da classe que será
executado.
O terceiro, e qualquer outro subseqüente, representa o ID ou
qualquer outra variável que serão passados como parâmetros para o
controller.
29. Removendo o index.php da URL
Por padrão, index.php será incluso nas URLs:
www.seu-site.com/index.php/noticias/artigos/meu_artigo
Para evitar seu uso, basta criar algumas regras de
reescrita de URL no arquivo .htaccess:
Para as URLs geradas pelo CodeIgniter não incluirem
o index.php, altere o arquivo de configuração para:
RewriteEngine on
RewriteCond $1 !^(index.php|img|css|js|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
$config['index_page'] = '';
30. Hello World!
<?php
class Hello extends CI_Controller {
function index() {
echo "Hello World!";
}
}
?>
system/application/controllers/hello.php
index é a ação padrão de um controller.
Se nenhuma ação for explicitamente especificada,
index será a ação usada.
32. Visões dentro de pastas
Uma boa prática consiste em armazenar
as visões dentro de pastas:
Uma sugestão é que o nome da pasta seja
o nome do controlador e o nome do
arquivo seja o nome da ação.
$this->load->view('folder_name/file_name');
$this->load->view('hello/index');
33. Controller sem model
<?php
class Pessoa extends CI_Controller {
function index() {
$dados['nome'] = 'João';
$dados['fone'] = '3323-1234';
$this->load->view('pessoa/index', $dados);
}
}
?>
<html>
<head><title>Pessoa</title></head>
<body>
<h1>Pessoa</h1>
<p>Nome: <?= $nome ?></p>
<p>Telefone: <?= $fone ?></p>
</body>
</html>
system/application/controllers/pessoa.php
system/application/views/pessoa/index.php
35. Diferentes formas de usar links
através do CodeIgniter
<?php $this->load->helper('url'); ?>
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>Hello World!!!</h1>
<p>Agora na Visão</p>
<p>Nome: <?= $nome ?></p>
<p><a href="<?= site_url('hello/acao')?>">
Ir para hello-acao usando site_url</a></p>
<p><a href="<?= base_url('hello/acao')?>">
Ir para hello-acao usando base_url</a></p>
<p><?= anchor('hello/acao',
'Ir para hello-acao usando anchor') ?></p>
</body>
</html>
Vamos dar preferência
ao uso de site_url
36. site_url() x base_url()
site_url()
index.php ou qualquer outra coisa definida
como index_page no arquivo de configuração
será adicionado à URL.
O url_suffix definido no arquivo de
configuração também será adicionado.
Recomenda-se o uso desta função para gerar
URLs mais portáveis entre diferentes hosts e
diretórios onde a aplicação esteja localizada.
Jamais use URLs absolutas para
referenciar recursos da própria aplicação.
37. Carregamento automático de helpers
application/config/autoload.php
$autoload['helper'] = array('url', 'file');
$autoload['helper'] = array('url');
Ou carregando mais de um helper....
38. Onde colocar imagens, css e js?
Pode-se criar as pastas a seguir na raiz do projeto (não é
na raiz da aplicação, ou seja, deve estar no mesmo nível,
mas não dentro na pasta application):
img
css
js
E armazenar os seus arquivos nelas.
Não é obrigado usar esse nomes de pastas, mas é um
bom padrão.
Essas pastas devem ser definidas nas regras do
.htaccess para uma reescrita de URL correta.
RewriteEngine on
RewriteCond $1 !^(index.php|img|css|js|robots.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
39. Reduzindo o tamanho da aplicação
Apague o diretório user_guide de seu
projeto.
Como ele ocupa bastante espaço,
recomenda-se que ele seja eliminado de
suas aplicações.
40. Modelo
<?php
class Pessoa extends CI_Model {
private $nome, $fone;
function setNome($nome) {
$this->nome = $nome;
}
function setFone($fone) {
$this->fone = $fone;
}
function getNome() {
return $this->nome;
}
function getFone() {
return $this->fone;
}
}
?>
system/application/models/pessoa.php
41. Controller usando model
<?php
class Pessoa extends CI_Controller {
function index() {
$this->load->model('pessoa');
$p = new Pessoa();
$p->setNome('João');
$p->setFone('3323-1234');
$dados['pessoa'] = $p;
$this->load->view('pessoa/index', $dados);
}
}
?>
system/application/controllers/pessoa.php
47. Paginação
As configurações de paginação podem ser
compartilhadas por toda a aplicação se armazenadas no
arquivo config/pagination.php.
Este arquivo não existe por padrão e, portanto, precisa ser
criado.
48. Paginação usando BD
<?php
class Pessoas extends CI_Controller {
function index($inicio=0) {
$num_linhas_pag = 2;
// Obtém parâmetros do formulário de busca
$param = $this->input->post();
// Obtém dados do modelo
$this->load->model('Pessoa');
$tot_linhas = $this->Pessoa->conta($param['texto']);
$dados['pessoas'] = $this->Pessoa->busca($param['texto'], $num_linhas_pag, $inicio);
// Configura a paginação
$this->load->library('pagination');
// Ver também arquivo config/pagination
$config['base_url'] = site_url('/pessoas/index');
$config['total_rows'] = $tot_linhas;
$config['per_page'] = $num_linhas_pag;
$this->pagination->initialize($config);
$dados['texto'] = $param['texto'];
$dados['visao'] = 'pessoas/index';
$this->load->view('layout', $dados);
}
...
?>
49. Paginação usando BD
<?php
class Pessoa extends CI_Model {
function Pessoa() {
$this->load->database();
}
function conta($texto) {
$this->db->like('nome', $texto);
$this->db->or_like('fone', $texto);
return $this->db->count_all_results('pessoas');
}
function busca($texto,$qtd,$inicio) {
$this->db->like('nome', $texto);
$this->db->or_like('fone', $texto);
$this->db->limit($qtd, $inicio);
return $this->db->get('pessoas')->result();
}
...
?>
50. Sessão
$this->load->library('session');
Dados de sessão no CI são armazenados em um array:
[array]
(
'session_id' => random hash,
'ip_address' => 'string - user IP address',
'user_agent' => 'string - user agent data',
'last_activity' => timestamp
)
In order to use the Session class you are required to set an
encryption key in your config file.
51. Sessão – obtenção de dados
$this->session->userdata('item');
$session_id = $this->session->userdata('session_id');