php 10 codeigniter
Post on 28-May-2015
2.231 Views
Preview:
TRANSCRIPT
Programação para WEB
Regis Pires Magalhãesregismagalhaes@ufc.br
O FrameworkCodeIgniter
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.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ó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.
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.
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.
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çã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.
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ê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
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á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
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.
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'] = '';
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.
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
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
<?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
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 onRewriteCond $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
<?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
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
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
<?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
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<?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); } ...?>
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(); } ...?>
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
top related