php 10 codeigniter

64
Programação para WEB Regis Pires Magalhães [email protected] O Framework CodeIgnite r

Upload: regis-magalhaes

Post on 28-May-2015

2.242 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: PHP 10 CodeIgniter

Programação para WEB

Regis Pires Magalhã[email protected]

O FrameworkCodeIgniter

Page 2: PHP 10 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.

Page 3: PHP 10 CodeIgniter

Frameworks PHPhttp://www.google.com.br/trends/

Page 4: PHP 10 CodeIgniter

Frameworks PHPhttp://www.google.com.br/trends/

Page 5: PHP 10 CodeIgniter

Frameworks PHP

http://www.zfort.com/blog/top-5-php-frameworks-infographic/

Page 6: PHP 10 CodeIgniter

Frameworks PHP

http://www.zfort.com/blog/top-5-php-frameworks-infographic/

Page 7: PHP 10 CodeIgniter

Frameworks PHP

http://www.linkedin.com/groups/What-is-best-PHP-Framework-78637.S.207852116

Page 8: PHP 10 CodeIgniter

HistóricoCriado 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.

Page 9: PHP 10 CodeIgniter

CaracterísticasCompatível com PHP 5.1.6 ou superior;Leve e não ocupa muito espaçoVersão 2.1.4 (08 / 07 / 2013):2,19 MB compactado, incluindo a documentação1,29 MB descompactado e sem a documentaçãoExcelente 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.

Page 10: PHP 10 CodeIgniter

CaracterísticasBancos 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.

Page 11: PHP 10 CodeIgniter

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.

Page 12: PHP 10 CodeIgniter

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.

Page 13: PHP 10 CodeIgniter

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.

Page 14: PHP 10 CodeIgniter

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.

Page 15: PHP 10 CodeIgniter

Arquitetura MVC

Page 16: PHP 10 CodeIgniter

Arquitetura MVC

Page 17: PHP 10 CodeIgniter

Arquitetura MVC

Page 18: PHP 10 CodeIgniter

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.

Page 19: PHP 10 CodeIgniter

MVC – Vantagens

Tarefas repetitivas podem ser separadas, facilitando a manutenção, entendimento, alterações, descoberta de erros e bugs, divisão de tarefas, etc.

Page 20: PHP 10 CodeIgniter

InstalaçãoBaixe o CodeIgniter em:http://codeigniter.com/download.phpDescompacte-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.

Page 21: PHP 10 CodeIgniter

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

Page 22: PHP 10 CodeIgniter

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

Page 23: PHP 10 CodeIgniter

Material em portuguêsGuia do usuário (versão antiga em português):

http://www.plasmadesign.com.br/codeigniter/user_guide-pt_BR/

Artigos e tutoriaishttp://codeigniterbrasil.com/

Vídeos (screencasts):Curso de CodeIgniter para iniciantes

https://www.youtube.com/playlist?list=PLInBAd9OZCzz2vtRFDwum0OyUmJg8UqDV

#DevCast - 07 - Introdução ao CodeIgniterhttps://www.youtube.com/watch?v=toLEaCbaglc

Page 24: PHP 10 CodeIgniter

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.

Page 25: PHP 10 CodeIgniter

MVC

Modelos são normalmente usados, mas não são obrigatórios no CodeIgniter.

Page 26: PHP 10 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.

Page 27: PHP 10 CodeIgniter

URLs amigáveisURLs 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

Page 28: PHP 10 CodeIgniter

URLs amigáveis

Os seguimentos da URL geralmente representam:

www.seu-site.com/classe/metodo/idO 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.

Page 29: PHP 10 CodeIgniter

Removendo o index.php da URLPor 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 onRewriteCond $1 !^(index\.php|img|css|js|robots\.txt)RewriteRule ^(.*)$ index.php/$1 [L]

$config['index_page'] = '';

Page 30: PHP 10 CodeIgniter

Hello World!

<?phpclass 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.

Page 31: PHP 10 CodeIgniter

Hello World!

<?phpclass 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

Page 32: PHP 10 CodeIgniter

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');

Page 33: PHP 10 CodeIgniter

Controller sem model

<?phpclass 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

Page 34: PHP 10 CodeIgniter

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

Page 35: PHP 10 CodeIgniter

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

Page 36: PHP 10 CodeIgniter

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.

Page 37: PHP 10 CodeIgniter

Carregamento automático de helpers

application/config/autoload.php

$autoload['helper'] = array('url', 'file');

$autoload['helper'] = array('url');

Ou carregando mais de um helper....

Page 38: PHP 10 CodeIgniter

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 onRewriteCond $1 !^(index\.php|img|css|js|robots\.txt)RewriteRule ^(.*)$ index.php/$1 [L]

Page 39: PHP 10 CodeIgniter

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.

Page 40: PHP 10 CodeIgniter

Modelo

<?phpclass 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

Page 41: PHP 10 CodeIgniter

Controller usando model

<?phpclass 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

Page 42: PHP 10 CodeIgniter

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

Page 43: PHP 10 CodeIgniter

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

Page 44: PHP 10 CodeIgniter

Compartilhando um layout

<?phpclass 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

Page 45: PHP 10 CodeIgniter

Conteúdo do layout

<h1>Pessoa</h1><p>Nome: <?= $pessoa->getNome(); ?></p><p>Telefone: <?= $pessoa->getFone(); ?></p>

system/application/views/pessoa/mostra.php

Page 46: PHP 10 CodeIgniter

Segurança – Filtro XSS

$config['global_xss_filtering'] = TRUE;

 application/config/config.php

XSS - cross-site scripting.

Page 47: PHP 10 CodeIgniter

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.

Page 48: PHP 10 CodeIgniter

Paginação usando BD<?phpclass 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); } ...?>

Page 49: PHP 10 CodeIgniter

Paginação usando BD<?phpclass 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(); } ...?>

Page 50: PHP 10 CodeIgniter

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.

Page 51: PHP 10 CodeIgniter

Sessão – obtenção de dados

$this->session->userdata('item');

$session_id = $this->session->userdata('session_id');

Page 52: PHP 10 CodeIgniter

Sessão – inserção de dados

$this->session->set_userdata($array);

$newdata = array( 'username' => 'johndoe', 'email' => '[email protected]', 'logged_in' => TRUE );

$this->session->set_userdata($newdata);

$this->session->set_userdata('some_name', 'some_value');

Page 53: PHP 10 CodeIgniter

Sessão – inserção de dados

$this->session->set_userdata($array);

$newdata = array( 'username' => 'johndoe', 'email' => '[email protected]', 'logged_in' => TRUE );

$this->session->set_userdata($newdata);

$this->session->set_userdata('some_name', 'some_value');

Page 54: PHP 10 CodeIgniter

Sessão – obtenção de todos os dados

$this->session->all_userdata()

Page 55: PHP 10 CodeIgniter

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();

Page 56: PHP 10 CodeIgniter

Flashdata

$this->session->set_flashdata('item', 'value');

$this->session->flashdata('item');

$this->session->keep_flashdata('item');

Page 57: PHP 10 CodeIgniter

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

Page 58: PHP 10 CodeIgniter

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 {...}...

Page 59: PHP 10 CodeIgniter

Associações

Page 60: PHP 10 CodeIgniter

Rotas

Page 61: PHP 10 CodeIgniter

Helpers

Page 62: PHP 10 CodeIgniter

Logging

Page 63: PHP 10 CodeIgniter

Co

Page 64: PHP 10 CodeIgniter

Referências

http://ellislab.com/codeigniter Doctrine

http://www.doctrine-project.org/ https://github.com/doctrine/doctrine2