apresentacao codeigniter

Download Apresentacao codeigniter

If you can't read please download the document

Upload: andre-tagliati

Post on 16-Apr-2017

3.921 views

Category:

Technology


2 download

TRANSCRIPT

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 :)