SlideShare una empresa de Scribd logo
1 de 64
Programação para WEB
Regis Pires Magalhães
regismagalhaes@ufc.br
O Framework
CodeIgniter
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.
Frameworks PHP
http://www.google.com.br/trends/
Frameworks PHP
http://www.google.com.br/trends/
Frameworks PHP
http://www.zfort.com/blog/top-5-php-frameworks-infographic/
Frameworks PHP
http://www.zfort.com/blog/top-5-php-frameworks-infographic/
Frameworks PHP
http://www.linkedin.com/groups/What-is-best-PHP-Framework-78637.S.207852116
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.
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.
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.
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.
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.
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.
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.
Arquitetura MVC
Arquitetura MVC
Arquitetura MVC
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.
MVC – Vantagens
Tarefas repetitivas podem ser separadas,
facilitando a manutenção, entendimento,
alterações, descoberta de erros e bugs,
divisão de tarefas, etc.
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.
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
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
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
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.
MVC
Modelos são normalmente usados, mas
não são obrigatórios no CodeIgniter.
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.
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
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.
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'] = '';
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.
Hello World!
<?php
class Hello extends Controller {
function index() {
$this->load->view('hello/index');
}
}
?>
<html>
<head><title>Hello</title></head>
<body>
<p>Hello World!</p>
</body>
</html>
system/application/views/hello/index.php
system/application/controllers/hello.php
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');
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
Configurações
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'prog_web';
$db['default']['dbdriver'] = 'mysql';
$config['base_url'] = '';
config/database.php
config/config.php
$route['default_controller'] = 'hello';
config/routes.php
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
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.
Carregamento automático de helpers
application/config/autoload.php
$autoload['helper'] = array('url', 'file');
$autoload['helper'] = array('url');
Ou carregando mais de um helper....
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]
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.
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
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
View usando model
<html>
<head>
<meta http-equiv="Content-type"
content="text/html; charset=utf-8" />
<title>Pessoa</title>
</head>
<body>
<h1>Pessoa</h1>
<p>Nome: <?= $pessoa->getNome(); ?></p>
<p>Telefone: <?= $pessoa->getFone(); ?></p>
</body>
</html>
system/application/views/pessoa/index.php
Compartilhando um layout
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>CI - Exemplo Layout</title>
</head>
<body>
<?= $this->load->view($view) ?>
</body>
</html>
system/application/views/layout.php
Compartilhando um layout
<?php
class Pessoa extends CI_Controller {
function index() {
$this->load->model('pessoa_model');
$p = new Pessoa_Model();
$p->setNome('João');
$p->setFone('3323-1234');
$dados['pessoa'] = $p;
$dados['view'] = 'pessoa/mostra';
$this->load->view('layout',$dados);
}
}
?>
system/application/controllers/pessoa.php
Conteúdo do layout
<h1>Pessoa</h1>
<p>Nome: <?= $pessoa->getNome(); ?></p>
<p>Telefone: <?= $pessoa->getFone(); ?></p>
system/application/views/pessoa/mostra.php
Segurança – Filtro XSS
$config['global_xss_filtering'] = TRUE;
application/config/config.php
XSS - cross-site scripting.
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.
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);
}
...
?>
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();
}
...
?>
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.
Sessão – obtenção de dados
$this->session->userdata('item');
$session_id = $this->session->userdata('session_id');
Sessão – inserção de dados
$this->session->set_userdata($array);
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
$this->session->set_userdata('some_name', 'some_value');
Sessão – inserção de dados
$this->session->set_userdata($array);
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
$this->session->set_userdata('some_name', 'some_value');
Sessão – obtenção de todos os dados
$this->session->all_userdata()
Sessão – remoção de dados
$this->session->unset_userdata('some_name');
$array_items = array('username' => '', 'email' => '');
$this->session->unset_userdata($array_items);
$this->session->sess_destroy();
Flashdata
$this->session->set_flashdata('item', 'value');
$this->session->flashdata('item');
$this->session->keep_flashdata('item');
Herdando de um controller seu
$config['subclass_prefix'] = 'MY_';
class MY_Controller extends CI_Controller {
// código
}
/application/core/MY_Controller.php
/application/config/config.php
class Usuarios extends MY_Controller {
// código
}
/application/controller/Usuarios.php
Validação
...
$this->load->library('form_validation');
$this->form_validation->set_rules('usuario', 'Usuario',
'required|is_unique[aluno.usuario]|max_length[20]');
$this->form_validation->set_rules('senha', 'Senha',
'required|max_length[10]');
$this->form_validation->set_rules('email', 'Email',
'required|is_unique[aluno.email]|max_length[50]');
$this->form_validation->set_message('max_lenght', 'Número de caracteres
ultrapassado.');
$this->form_validation->set_message('is_unique', 'O email/usuario já
existe.');
if ($this->form_validation->run() == TRUE){
...
} else {
...
}
...
Associações
Rotas
Helpers
Logging
Co
Referências
http://ellislab.com/codeigniter
Doctrine
http://www.doctrine-project.org/
https://github.com/doctrine/doctrine2

Más contenido relacionado

La actualidad más candente

NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2Flávio Lisboa
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDr. Spock
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaAna Albert
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenLeandro Costa
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 
Apresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateApresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateZarathon Maia
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoMarcos Bezerra
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOLeonardo Sousa
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPSérgio Vilar
 
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc   java para desenvolvimento webBancos de dados e jdbc   java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento websilvio_sas
 

La actualidad más candente (20)

NoSQL com Zend Framework 2
NoSQL com Zend Framework 2NoSQL com Zend Framework 2
NoSQL com Zend Framework 2
 
Dicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSFDicas e truques sobre performance em JavaEE, JPA e JSF
Dicas e truques sobre performance em JavaEE, JPA e JSF
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
Minicurso Yii2
Minicurso Yii2Minicurso Yii2
Minicurso Yii2
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Jsf com hibernate, spring security e maven
Jsf com hibernate, spring security e mavenJsf com hibernate, spring security e maven
Jsf com hibernate, spring security e maven
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 
Apresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+HibernateApresentação Java Web - Jsf+Hibernate
Apresentação Java Web - Jsf+Hibernate
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. Introdução
 
Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2
 
Arquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAOArquitetura MVC, JavaBeans e DAO
Arquitetura MVC, JavaBeans e DAO
 
Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHP
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
Frameworks em Java
Frameworks em JavaFrameworks em Java
Frameworks em Java
 
Bancos de dados e jdbc java para desenvolvimento web
Bancos de dados e jdbc   java para desenvolvimento webBancos de dados e jdbc   java para desenvolvimento web
Bancos de dados e jdbc java para desenvolvimento web
 

Destacado

Mini-curso codeIgniter - aula 1
Mini-curso codeIgniter - aula 1Mini-curso codeIgniter - aula 1
Mini-curso codeIgniter - aula 1lfernandomcj
 
Linguagem de Programação Comercial
Linguagem de Programação ComercialLinguagem de Programação Comercial
Linguagem de Programação ComercialTathiana Machado
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webRegis Magalhães
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoRegis Magalhães
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducaoRegis Magalhães
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Regis Magalhães
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosRegis Magalhães
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Regis Magalhães
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 

Destacado (20)

Mini-curso codeIgniter - aula 1
Mini-curso codeIgniter - aula 1Mini-curso codeIgniter - aula 1
Mini-curso codeIgniter - aula 1
 
Linguagem de Programação Comercial
Linguagem de Programação ComercialLinguagem de Programação Comercial
Linguagem de Programação Comercial
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Java 14 Javadoc
Java 14 JavadocJava 14 Javadoc
Java 14 Javadoc
 
Pascal Tipos
Pascal TiposPascal Tipos
Pascal Tipos
 
Java 15 Jar
Java 15 JarJava 15 Jar
Java 15 Jar
 
Prog web 06-php-oo
Prog web 06-php-ooProg web 06-php-oo
Prog web 06-php-oo
 
Easy Rails
Easy RailsEasy Rails
Easy Rails
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Prog web 07-pdo
Prog web 07-pdoProg web 07-pdo
Prog web 07-pdo
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011Linked Data - Minicurso - SBBD 2011
Linked Data - Minicurso - SBBD 2011
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Coding Dojo
Coding DojoCoding Dojo
Coding Dojo
 
Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011Linked Data Tutorial - Conferencia W3C Brasil 2011
Linked Data Tutorial - Conferencia W3C Brasil 2011
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Prog web 08-php-mvc
Prog web 08-php-mvcProg web 08-php-mvc
Prog web 08-php-mvc
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 

Similar a PHP 10 CodeIgniter

Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De SucessoJose Wilker
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.netleojr_0
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Code Igniter & Zend Framework - Uma união de sucesso
Code Igniter & Zend Framework - Uma união de sucessoCode Igniter & Zend Framework - Uma união de sucesso
Code Igniter & Zend Framework - Uma união de sucessoJose Wilker
 
Software livre - Parte 3
Software livre - Parte 3Software livre - Parte 3
Software livre - Parte 3Fabrício Basto
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicRicardo Guerra Freitas
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressJackson F. de A. Mafra
 
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptxProjeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptxLuiz Antonio
 

Similar a PHP 10 CodeIgniter (20)

Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Cake Php
Cake PhpCake Php
Cake Php
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Code Igniter & Zend Framework Uma UniãO De Sucesso
Code Igniter & Zend Framework   Uma UniãO De SucessoCode Igniter & Zend Framework   Uma UniãO De Sucesso
Code Igniter & Zend Framework Uma UniãO De Sucesso
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.net
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
Aplicativo aula03
Aplicativo aula03Aplicativo aula03
Aplicativo aula03
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
A Linguagem Php
A Linguagem PhpA Linguagem Php
A Linguagem Php
 
Code Igniter & Zend Framework - Uma união de sucesso
Code Igniter & Zend Framework - Uma união de sucessoCode Igniter & Zend Framework - Uma união de sucesso
Code Igniter & Zend Framework - Uma união de sucesso
 
Software livre - Parte 3
Software livre - Parte 3Software livre - Parte 3
Software livre - Parte 3
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual BasicEvolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
The Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPressThe Ultimate Guide to Development in WordPress
The Ultimate Guide to Development in WordPress
 
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptxProjeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
Projeto Web - Aula 1 - Fundamentos do Dev WEB.pptx
 

Más de Regis Magalhães

Más de Regis Magalhães (16)

High Dimensional Data
High Dimensional DataHigh Dimensional Data
High Dimensional Data
 
Prog web 09-php-crud-mvc
Prog web 09-php-crud-mvcProg web 09-php-crud-mvc
Prog web 09-php-crud-mvc
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Prog web 04-php-gd
Prog web 04-php-gdProg web 04-php-gd
Prog web 04-php-gd
 
Prog web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhosProg web 03-php-sessoes-cookies_cabecalhos
Prog web 03-php-sessoes-cookies_cabecalhos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
Prog web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_webProg web 00-modelo-cliente_servidor_web
Prog web 00-modelo-cliente_servidor_web
 
Prog web 01-php-introducao
Prog web 01-php-introducaoProg web 01-php-introducao
Prog web 01-php-introducao
 
Java 01 Java Visao Geral Resumo
Java 01 Java Visao Geral ResumoJava 01 Java Visao Geral Resumo
Java 01 Java Visao Geral Resumo
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
java 00 Introducao
java 00 Introducaojava 00 Introducao
java 00 Introducao
 
POO Plano de Curso
POO Plano de CursoPOO Plano de Curso
POO Plano de Curso
 
Php 04 Mysql
Php 04 MysqlPhp 04 Mysql
Php 04 Mysql
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 

PHP 10 CodeIgniter

  • 1. Programação para WEB Regis Pires Magalhães regismagalhaes@ufc.br O Framework CodeIgniter
  • 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.
  • 25. MVC Modelos são normalmente usados, mas não são obrigatórios no CodeIgniter.
  • 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.
  • 31. Hello World! <?php class Hello extends Controller { function index() { $this->load->view('hello/index'); } } ?> <html> <head><title>Hello</title></head> <body> <p>Hello World!</p> </body> </html> system/application/views/hello/index.php system/application/controllers/hello.php
  • 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
  • 34. Configurações $db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'root'; $db['default']['password'] = ''; $db['default']['database'] = 'prog_web'; $db['default']['dbdriver'] = 'mysql'; $config['base_url'] = ''; config/database.php config/config.php $route['default_controller'] = 'hello'; config/routes.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
  • 42. View usando model <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>Pessoa</title> </head> <body> <h1>Pessoa</h1> <p>Nome: <?= $pessoa->getNome(); ?></p> <p>Telefone: <?= $pessoa->getFone(); ?></p> </body> </html> system/application/views/pessoa/index.php
  • 43. Compartilhando um layout <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>CI - Exemplo Layout</title> </head> <body> <?= $this->load->view($view) ?> </body> </html> system/application/views/layout.php
  • 44. Compartilhando um layout <?php class Pessoa extends CI_Controller { function index() { $this->load->model('pessoa_model'); $p = new Pessoa_Model(); $p->setNome('João'); $p->setFone('3323-1234'); $dados['pessoa'] = $p; $dados['view'] = 'pessoa/mostra'; $this->load->view('layout',$dados); } } ?> system/application/controllers/pessoa.php
  • 45. Conteúdo do layout <h1>Pessoa</h1> <p>Nome: <?= $pessoa->getNome(); ?></p> <p>Telefone: <?= $pessoa->getFone(); ?></p> system/application/views/pessoa/mostra.php
  • 46. Segurança – Filtro XSS $config['global_xss_filtering'] = TRUE; application/config/config.php XSS - cross-site scripting.
  • 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');
  • 52. Sessão – inserção de dados $this->session->set_userdata($array); $newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata); $this->session->set_userdata('some_name', 'some_value');
  • 53. Sessão – inserção de dados $this->session->set_userdata($array); $newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata); $this->session->set_userdata('some_name', 'some_value');
  • 54. Sessão – obtenção de todos os dados $this->session->all_userdata()
  • 55. Sessão – remoção de dados $this->session->unset_userdata('some_name'); $array_items = array('username' => '', 'email' => ''); $this->session->unset_userdata($array_items); $this->session->sess_destroy();
  • 57. Herdando de um controller seu $config['subclass_prefix'] = 'MY_'; class MY_Controller extends CI_Controller { // código } /application/core/MY_Controller.php /application/config/config.php class Usuarios extends MY_Controller { // código } /application/controller/Usuarios.php
  • 58. Validação ... $this->load->library('form_validation'); $this->form_validation->set_rules('usuario', 'Usuario', 'required|is_unique[aluno.usuario]|max_length[20]'); $this->form_validation->set_rules('senha', 'Senha', 'required|max_length[10]'); $this->form_validation->set_rules('email', 'Email', 'required|is_unique[aluno.email]|max_length[50]'); $this->form_validation->set_message('max_lenght', 'Número de caracteres ultrapassado.'); $this->form_validation->set_message('is_unique', 'O email/usuario já existe.'); if ($this->form_validation->run() == TRUE){ ... } else { ... } ...
  • 60. Rotas
  • 63. Co