CodeIgniter
Turbinando a produtividade com MVC
Francisco Souza@franciscosouza
Andr Tagliati@tagliati
Bom dia, hoje vamos falar sobre o CodeIgniter, um framework PHP para construo de aplicaes web com MVC.
xikin
Hora de acordar
http://www.flickr.com/photos/dominiqs/137546402/
Se voc dormiu na outra palestra e no sabe o que framework, boa sorte :P
CodeIgniter um framework PHP, e voc j sabe o que um framework e por que usar um framework. Isso significa que podemos focar no CodeIgniter, na parte prtica da coisa :)
xikin
quem?
Mas, antes de seguir com o CodeIgniter, quem vos fala?!
xikin
Francisco Souza
@franciscosouza
Bom, meu nome Francisco, e eu trabalho com desenvolvimento web na Giran Solues e Ensino.
xikin
Francisco Souza
@franciscosouza
Pior que t, no fica.[...]
xikin
Francisco Souza
@franciscosouza
Pior que t, no fica.Frase errada, Tiririca![...]
xikin
Francisco Souza
@franciscosouza
Ah, foi mal!Xikin no, mame![...]
xikin
Andr Tagliati
@tagliati
E esse o Andr Tagliati, o Gligli \o/
Ele tambm trabalha com desenvolvimento de softwares web na Giran
xikin
Andr Tagliati
@tagliati
Foto de mendigo![...]
xikin
Configurao
Acabamos de assistir a uma palestra sobre o uso de frameworks em PHP.
Mas importante notar que alguns frameworks do dor de cabea para instalar e configurar.
gligli
Boa notcia
Com o CodeIgniter no, instalar e configurar facinho :D
gligli
www.codeigniter.com
$db['default']['hostname'] = "localhost";$db['default']['username'] = "root";$db['default']['password'] = "root";$db['default']['database'] = "dados";$db['default']['dbdriver'] = "mysql";
$config['base_url']= "http://localhost/";
Voc entra no site, baixa a ltima verso, altera seis linhas de configurao (banco de dados e URL) e pronto :)
Configura a URL no arquivo config.php
Configura a conexo com o banco de dados no arquivo database.php.
E pronto! :D
gligli
Welcome to CodeIgniter :D
gligli
#comofas
Hora de programar.
J vimos que configurar tranquilo, com poucas linhas de cdigo, mas e agora, para construir uma aplicao? Como a estrutura do CodeIgniter?
xikin
MVC
Vamos explorar o MVC do CodeIgniter, conhecer cada uma das
camadas.
J aproveitando o embalo do que o tio hackin falou na palestra
anterior. No lembra? Chama o Hackin!
xikin
Modelo
Podemos dizer que nossos modelos fazem parte da turma que trabalharo com a informao de nosso banco de dados...
gligli
O acesso ao banco configuramos anteriormente.. mas como chegar a
nossas queridas tabelas? E no modelo que vamos perfazer o caminho e
chegar a informao desejada...
o modelo que ter a funo de retornar as informaes e onde devemos
determinar o caminho para chegar aos dados to desejados!
gligli
extends Model {
Comeamos extendendo nossa Modelo da classe Model que fornecida pelo CI.
gligli
extends Model {
class Pessoa extends Model {
function Pessoa() { parent::Model(); }
}
Temos ento nosso model definido... ou nosso prottipo..
A principio no apresenta nada de surpreendente
Criado esse modelo podemos ento listar tudo que compe nosso crud
padro... e como o codeIgniter trabalha com o Active record podemos
tirar um pouco de proveito disso...
gligli
Active Record
Tu tava falando de model e agora vem com active record? Vou explicar... O code igniter utiliza uma verso modificada do pattern Active Record para trabalhar com nosso banco de dados permitindo acessar, inserir, atualizar e excluir dados de forma simplificada.
gligli
function loadAll(){
Sabendo disso podemos criar mtodos em nosso Modelo que buscam a informao que necessitamos...
gligli
function loadAll(){
$query = $this->db->get('pessoas');return $query->result();
Assim em nosso modelo temos um mtodo que retorna todos as entradas para a tabela pessoas.
gligli
Ento no controller
$this->load->model('Pessoa');$this->Pessoa->loadAll();
Ento nas actions criadas em nosso amiguinho controller poderemos usufruir da camada de modelo... mas nem falamos de controller ainda... isso vir logo a seguir...
gligli
Legal mas...
Pode melhorar?
Ter que criar o crud todo... fica um pouco chao... o codeigniter poderia bem fazer todo o trabalho e eu ficar tranquilo.. bem... infelizmente o code igniter no faz tudo... nativamente.
gligli
Mas claro!!!
Mas existe uma alternativa...muito interessante.
gligli
Existe um orm desenvolvido para o codeigniter que seria at mesmo tema de uma boa conversa que d conta de muitas das necessidades no desenvolvimento da aplicao
gligli
Controle
Seguindo uma ordem lgica, e no a ordem da sigla, vamos falar um pouco sobre a camada de controle do CodeIgniter.
xikin
Eis o fluxo de uma aplicao no CodeIgniter
xikin
T vendo esse carinha em destaque?
xikin
Esse!
Ele o application controller, o controlador da aplicao :D
Vamos entender um pouco do funcionamento da camada de controle do CodeIgniter.
xikin
Primeira coisa: no perca o controle.
Com a simplicidade e facilidade da camada de controle do CodeIgniter, tudo ficar mais fcil para todos :D
xikin
extends Controller {
No CodeIgniter, controllers so classes que herdam da classe Controller, provida pelo CodeIgniter.
xikin
extends Controller {
class Pessoas extends Controller {
// Actions aqui
}
Eis um exemplo de controller.
xikin
extends Controller {
class Pessoas extends Controller {
// Actions aqui
}
WHAT?!
Action? O que action? o__O'
xikin
public function index
Action so mtodos pblicos dentro da classe de controle.
Trata-se de mtodos que recebem a requisio HTTP do cliente e se encarregam de dar a resposta em mesmo formato, seja carregando uma view ou retornando algum JSON.
Cada action acessada a partir do navegador, por uma URL.
Mas, como eu acesso tais actions?
xikin
Convention
over
Configuration
CodeIgniter usa a ideia de conveno mais que configurao, ou seja, as URLs so construdas baseadas em convenes, com menos configurao :)
Mas como isso?
xikin
meusite.com.br/
Voc tem a URL, o endereo do seu site.
xikin
meusite.com.br/
controller/
Tem o controller.
xikin
meusite.com.br/
controller/
action/
E dentro do controller tem a action, que um mtodo.
xikin
meusite.com.br/
controller/
action/
parmetros
Caso esse mtodo receba parmetros, s passar aqui e est tudo resolvido :)
xikin
Viso
gligli
Lembra do fluxo de aplicao?
Pois bem. Estamos de volta! Agora saindo do controllere...
gligli
Viu? Pois ... nesse amiguinho ai onde ns vamos chamar uma pgina
gligli
$this->load->view('hello');
Com um simples comando em nosso controller dizendo qual arquivo ser carregado para viso...Dessa forma estamos declarando qual arquivo ser retornado quando o controller( ou melhor ainda action ) em questo for requisitado
gligli
$this->load->view('hello');
Temos assim o retorno do contedo de nosso amigo arquivo hello
gligli
OK....
...entendi
Beleza... mas e agora?
gligli
OK....
...entendi
Mas e os
J tenho um html... mas quero fazer alguma coisa que possua informaes.. quero contedo dinnico!... no tem problema! Voc pode passar tais informaes facilmente.
gligli
sussa!
De boa vi
gligli
sussa!
$data[hello] = Oi..;
$this->load->view('hello',$data);
Voc usa um array usando indices de chave....
gligli
sussa!
$data[hello] = Oi..;
$this->load->view('hello',$data);
dai no html
Eeeeeee
gligli
sussa!
$data[hello] = Oi..;
$this->load->view('hello',$data);
dai no html...
Chama o seu indice como uma string no html. Super
sussa....
Mas eu gosto de dividir meus arquivo..Calma... tem mais!
gligli
e ainda...
$data[hello] = Oi..;$this->load->view('topo');
$this->load->view('hello',$data);$this->load->view('rodape');
Voc pode chamar multiplas views! que doideira... aqui num esquema loco de topo... conteudo e rodape!
gligli
e ainda...
$data[hello] = Oi..;$this->load->view('topo');
$this->load->view('hello',$data);$this->load->view('rodape');
ou...
$this->load->view('hello','',true);
Ou Ainda podemos retornar uma view como dados! Incrvel!
gligli
e ainda...
$data[hello] = Oi..;$this->load->view('topo');
$this->load->view('hello',$data);$this->load->view('rodape');
ou...
$this->load->view('hello','',true);
Vai dizer que no bacana?
E voc pode passar objetos... arrays...e por ai vai
gligli
Bnus
Fase bnus, vamos ver o que o CodeIgniter tem a oferecer alm das trs camadas do modelo MVC.
xikin
RaduuuuuuquiBnus
[]
xikin
Formulrios
Validar formulrios um saco n?!
xikin
$erros = array();if (!$_POST['nome']) {$erros[] = 'O campo Nome requerido.';}
if (!$_POST['email']) {$erros[] = 'O campo E-mail requerido.';} else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {$erros[] = 'O campo E-mail no um e-mail vlido';}
if (!$POST['mensagem']) {$erros[] = 'O campo Mensagem requerido.';}
if (!empty($erros)) {$this->load->view('formulario.php', array('erros' => $erros));}
Vamos a um exemplo usando o mtodo padro de validao com PHP :D
Veja, estamos usando o CodeIgniter, ento com quatro ifs e um array, podemos validar um formulrio de contato e despachar para a view.
xikin
$erros = array();if (!$_POST['nome']) {$erros[] = 'O campo Nome requerido.';}
if (!$_POST['email']) {$erros[] = 'O campo E-mail requerido.';} else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {$erros[] = 'O campo E-mail no um e-mail vlido';}
if (!$POST['mensagem']) {$erros[] = 'O campo Mensagem requerido.';}
if (!empty($erros)) {$this->load->view('formulario.php', array('erros' => $erros));}
E na view ns escrevemos este cdigo e pronto, tudo muito simples, separando em camadas, temos uma validao massa n?!
Claro que no, chato e repetitivo ficar validando dados com um monte de Ifs.
xikin
Receber torpedo?
O problema que estamos fazendo as coisas da forma errada.
E o CodeIgniter pode nos ajudar a fazer as coisas de uma forma melhor.
xikin
$this->load->library('form_validation');
O CodeIgniter conta com vrias bibliotecas, e uma delas a biblioteca de validao de formulrio.
Assim como se faz com modelos e views, ns temos que fazer o load de todas as bibliotecas que vamos utilizar.
A biblioteca de validao de formulrios, chamada form_validation, carregada desta forma ento :D
xikin
$this->load->library('form_validation');
$this->form_validation->set_rules('nome', 'Nome', 'required');$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');$this->form_validation->set_rules('mensagem', 'Mensagem', 'required');
Ento ns configuramos as regras de validao:
- Campo nome requerido;- Campo e-mail requerido e e-mail vlido;- Campo mensagem requerido.
xikin
$this->load->library('form_validation');
$this->form_validation->set_rules('nome', 'Nome', 'required');$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');$this->form_validation->set_rules('mensagem', 'Mensagem', 'required');
$this->form_validation->run();
Ento ns executamos :D
xikin
$this->load->library('form_validation');
$this->form_validation->set_rules('nome', 'Nome', 'required');$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');$this->form_validation->set_rules('mensagem', 'Mensagem', 'required');
$this->form_validation->run();
E na view, o cdigo simples :D
Se as coisas derem errado, as mensagens aparecem na tela ;D
xikin
Eis o resultado :)
Claro que o seu designer pode deixar isso mais bonito, mas veja como simples validar um simples formulrio, e nesta mesma linha, se torna simples validar qualquer formulrio :D
xikin
Messaging
http://www.flickr.com/photos/funtik/1175522045/
Uma caractersticapresente em alguns frameworks web como Django, Flask e Rails, o uso de um sub-framework de mensagens, para trocar mensagens entre as pginas. Tais mensagens tambm so conhecidas como flashs.
O CodeIgniter prov uma biblioteca de sesso que inclui armazenamento de dados por apenas um request, trabalhando com a ideia de flashdata.
Assim, podemos utilizar variveis neste escopo para trocar mensagens entre redirecionamentos. Por exemplo, se desejamos exibir uma mensagem aps enviar o formulrio de contato, podemos simplesmente guardar a mensagem dentro dos dados flash e exibir na view.
gligli
WHAT?!Cuma?! No entendi absolutamente nada!
Show me the code, man! :D
gligli
WHAT?!
$this->load->library('session');
$this->session->set_flashdata('notice','Contato enviado com sucesso!');
Como session uma biblioteca, a primeira coisa a fazer antes de utiliz-la, carreg-la :)
Aps carregar a biblioteca, podemos utilizar o mtodo set_flashdata para salvar uma mensagem de notice. O primeiro parmetro a chave que vamos salvar, o segundo o valor.
Salvamos a mensagem Contato enviado com sucesso! na chave notice, dentro dos dados de flash.
gligli
s isso?Ta, mas s isso?
Esse bnus s uma biblioteca de validao de formulrios e um frameworkzinho pra troca de mensagens?
gligli
s isso?- Carrinho de compras;- Envio de e-mail;- Criptografia;- Upload de arquivos;- Manipulao de imagens;- Input (tratando dados de formulrios, segurana++);- Paginao;- Sesso;- Template parser;- URI;- XML-RPC;- ...
codeigniter.com
Claro que no.
O CodeIgniter tambm conta com bibliotecas para construo de carrinho de compras, envio de e-mail (por SMTP ou outro mtodo), criptografia dos dados, upload de arquivos, manipulao de imagens, tratamento de dados submetidos via formulrio, paginao, sesso, parsing de templates, URI (para trabalhar com as URLs no sistema), XML-RPC e mais um porrada de coisas, confira no site oficial :)
xikin
s isso?- Carrinho de compras;- Envio de e-mail;- Criptografia;- Upload de arquivos;- Manipulao de imagens;- Input (tratando dados de formulrios, segurana++);- Paginao;- Sesso;- Template parser;- URI;- XML-RPC;- ...
codeigniter.com
Doidera mano!Bo demais :D
xikin
Helpers
Alm das bibliotecas, o CodeIgniter conta tambm com helpers, que so agregados de funes prontos para serem utilizadas em sistemas desenvolvidos com o CodeIgniter.
como ter um arquivo com funes, com a diferena de que essas funes foram construdas e testadas por vrias pessoas, e tm maior garantia de funcionamento.
xikin
Array Helper;
Cookie Helper;
Date Helper;
Download Helper;
E-mail Helper;
Smiley Helper;
URL Helper;
...
O CodeIgniter conta com um helper para lidar com Arrays, obter elementos, posio de elementos (encapsulanto funes nativas do PHP). Cookie Helper, para facilmente lidar com os cookies, que torna simples tarefas e operaes com cookies, como armazenamento, obteno, dentre outros. Date Helper, conta com funes para lidar com datas, como funes para converso e obteno de data corrente. Download Helper, para facilmente forar o download de alguns arquivos, til para trabalhar junto com a biblioteca de upload.
Temos tambm o e-mail helper, que conta com funes para validao de e-mail e envio de e-mail com a funo mail nativa do PHP.
Por fim, o helper que eu mais utilizo: o URL helper, para montar URLs absolutas da sua aplicao, por exemplo para carregar imagens ou criao de links.
Array Helper;
Cookie Helper;
Date Helper;
Download Helper;
E-mail Helper;
Smiley Helper;
URL Helper;
...
:D :) ;)Um outro Helper super til o Smiley Helper, para pegar parte dos textos e converter para Smileys.
xikin
http://www.flickr.com/photos/tambako/999112257/
Onde ir agora?
E agora? Qual caminho seguir?
gligli
http://www.flickr.com/photos/tambako/999112257/
Onde ir agora?
www.codeigniter.com
www.codeigniter.com, site oficial, contendo a excelente documentao do CodeIgniter, em ingls.
http://www.flickr.com/photos/tambako/999112257/
Onde ir agora?
www.codeigniter.com.br
www.codeigniter.com
Para os que no curtem muito o ingls, tambm h o site que concentra a comunidade brasileira, incluindo uma lista de discusso bem bacana.
http://www.flickr.com/photos/tambako/999112257/
Onde ir agora?
www.codeigniter.com.br
www.codeigniter.com
getcloudigniter.com
CloudIgniter, para voc comear a usar CodeIgniter hoje, na nuvem! =D
Tenha uma instncia do CodeIgniter gratuita rodando na web :)
Voc pode ter um subdomnio .cloudigniter.com ou pagar uma pequena taxa por mais recursos, incluindo usar um domnio prrprio.
Com codeigniter assim...
Andr Tagliati@[email protected]
Francisco Souza@franciscosouzafrancisco@franciscosouza.netwww.franciscosouza.com.br
http://www.flickr.com/photos/oberazzi/318947873/
Dvidas?
A esto nossos contatos :)