Você está na página 1de 12

Tutorial

Este tutorial pretende apresentar a estrutura do CodeIgniter e os princípios básicos da arquitetura MVC. Ele
mostrará como um aplicativo CodeIgniter básico é construído passo a passo.

Neste tutorial, você criará um aplicativo de notícias básico. Você começará escrevendo o código que pode
carregar páginas estáticas. Em seguida, você criará uma seção de notícias que lê itens de notícias de um
banco de dados. Por fim, você adicionará um formulário para criar itens de notícias no banco de dados.

Este tutorial se concentrará principalmente em:

 Noções básicas do Model-View-Controller


 Noções básicas de roteamento
 Validação de formulário
 Executando consultas básicas ao banco de dados usando o "Query Builder"

O tutorial inteiro está dividido em várias páginas, cada uma explicando uma pequena parte da funcionalidade
da estrutura do CodeIgniter. Você passará pelas seguintes páginas:

 Introdução, esta página, que fornece uma visão geral do que esperar.
 Páginas estáticas, que ensinam os conceitos básicos de controladores, visualizações e roteamento.
 Notícias, onde você começará a usar modelos e fará algumas operações básicas do banco de dados.
 Crie itens de notícias , que introduzirão operações mais avançadas do banco de dados e validação de
formulário.
 Conclusão, que fornecerá algumas dicas sobre leituras adicionais e outros recursos.

Aproveite sua exploração da estrutura do CodeIgniter.


Páginas estáticas
Nota: Este tutorial pressupõe que você baixou o CodeIgniter e instalou a estrutura em seu ambiente de
desenvolvimento.

A primeira coisa que você fará é configurar um controlador para lidar com páginas estáticas. Um controlador
é simplesmente uma classe que ajuda a delegar o trabalho. É a cola do seu aplicativo da web.

Por exemplo, quando uma chamada é feita para:

http://example.com/news/latest/10

Podemos imaginar que existe um controlador chamado "news". O método chamado nas notícias seria "mais
recente". O trabalho do método de notícias pode ser pegar 10 itens de notícias e renderizá-los na
página. Muitas vezes, no MVC, você verá padrões de URL que correspondem:

http://example.com/[controller-class}/[controller-method}/[arguments ]

À medida que os esquemas de URL se tornam mais complexos, isso pode mudar. Mas, por enquanto, é tudo
o que precisamos saber.

Crie um arquivo em application / controllers / Pages.php com o seguinte código.

<?php
class Pages extends CI_Controller {

public function view($page = 'home')


{
}
}

Você criou uma classe chamada Pages , com um método de exibição que aceita um argumento
chamado $page . A Pages classe está estendendo a CI_Controller classe. Isso significa que a nova classe de
páginas pode acessar os métodos e variáveis definidos na CI_Controller classe ( system / core /
Controller.php ).

O controlador é o que se tornará o centro de cada solicitação para seu aplicativo da web. Em discussões
muito técnicas do CodeIgniter, ele pode ser chamado de superobjeto . Como qualquer classe php, você se
refere a ela dentro de seus controladores como $this . A referência $this é como você carregará bibliotecas,
visualizações e geralmente comandará a estrutura.
Agora que você criou seu primeiro método, é hora de criar alguns modelos básicos de página. Criaremos
duas "visualizações" (modelos de página) que atuam como rodapé e cabeçalho da página.

Crie o cabeçalho em application / views / templates / header.php e adicione o seguinte código:

<html>
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>

<h1><?php echo $title; ?></h1>

O cabeçalho contém o código HTML básico que você deseja exibir antes de carregar a visualização principal, junto com
um cabeçalho. Também produzirá a $title variável, que definiremos mais adiante no controlador. Agora, crie um rodapé
em application / views / templates / footer.php que inclua o seguinte código:

<em>&copy; 2015</em>
</body>
</html>

Adicionando lógica ao controlador


Antes, você configurava um controlador com um view() método. O método aceita um parâmetro, que é o
nome da página a ser carregada. Os modelos de página estática estarão localizados no diretório application /
views / pages / .

Nesse diretório, crie dois arquivos denominados home.php e about.php . Dentro desses arquivos, digite
algum texto - como desejar - e salve-o. Se você gosta de ser particularmente original, tente "Hello World!".

Para carregar essas páginas, você deve verificar se a página solicitada realmente existe:

public function view($page = 'home')


{
if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}

$data['title'] = ucfirst($page); // Capitalize the first letter

$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}

Agora, quando a página existe, ela é carregada, incluindo o cabeçalho e rodapé, e exibida ao usuário. Se a
página não existir, um erro "Página 404 não encontrada" será exibido.
A primeira linha deste método verifica se a página realmente existe. A file_exists() função nativa do PHP é
usada para verificar se o arquivo está onde deveria estar. show_404() é uma função interna do CodeIgniter que
renderiza a página de erro padrão.

No modelo de cabeçalho, a $title variável foi usada para personalizar o título da página. O valor do título é
definido neste método, mas, em vez de atribuir o valor a uma variável, ele é atribuído ao elemento title
na $data matriz.

A última coisa que precisa ser feita é carregar as visualizações na ordem em que devem ser exibidas. O
segundo parâmetro no view() método é usado para passar valores para a visualização. Cada valor na $data

matriz é atribuído a uma variável com o nome de sua chave. Portanto, o valor de $data['title'] no controlador
é equivalente ao $title da exibição.

Encaminhamento
O controlador está funcionando agora! Aponte seu navegador [your-site-url]index.php/pages/view para ver sua
página. Ao visitar, index.php/pages/view/about você verá a página sobre, incluindo novamente o cabeçalho e o
rodapé.

Usando regras de roteamento personalizadas, você tem o poder de mapear qualquer URI para qualquer
controlador e método e se libertar da convenção normal: http://example.com/[controller-class]/[controller-

method]/[arguments]

Vamos fazer isso. Abra o arquivo de roteamento localizado em application / config / routes.php e adicione as
duas linhas a seguir. Remova todos os outros códigos que definem qualquer elemento na $route matriz.

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

O CodeIgniter lê suas regras de roteamento de cima para baixo e direciona a solicitação para a primeira
regra correspondente. Cada regra é uma expressão regular (lado esquerdo) mapeada para um nome de
controlador e método separado por barras (lado direito). Quando uma solicitação é recebida, o CodeIgniter
procura a primeira correspondência e chama o controlador e o método apropriados, possivelmente com
argumentos.

Mais informações sobre roteamento podem ser encontradas na documentação de roteamento de URI .

Aqui, a segunda regra na $route matriz corresponde a qualquer solicitação usando a string curinga (:any) . e
passa o parâmetro para o view() método da Pages classe.
Agora visite index.php/about . Ele foi roteado corretamente para o view() método no controlador de
páginas? Impressionante!

Seção Notícias
Na última seção, examinamos alguns conceitos básicos da estrutura, escrevendo uma classe que inclui
páginas estáticas. Limpamos o URI adicionando regras de roteamento personalizadas. Agora é hora de
introduzir conteúdo dinâmico e começar a usar um banco de dados.

Configurando seu modelo


Em vez de escrever operações de banco de dados diretamente no controlador, as consultas devem ser
colocadas em um modelo, para que possam ser reutilizadas facilmente mais tarde. Os modelos são o local
onde você recupera, insere e atualiza informações no banco de dados ou em outros armazenamentos de
dados. Eles representam seus dados.

Abra o diretório application / models / e crie um novo arquivo chamado News_model.php e adicione o
seguinte código. Verifique se você configurou seu banco de dados corretamente, conforme descrito aqui .

<?php
class News_model extends CI_Model {

public function __construct()


{
$this->load->database();
}
}

Esse código é semelhante ao código do controlador usado anteriormente. Ele cria um novo modelo
estendendo CI_Model e carregando a biblioteca de banco de dados. Isso tornará a classe do banco de dados
disponível através do $this->db objeto.

Antes de consultar o banco de dados, um esquema do banco de dados deve ser criado. Conecte-se ao seu
banco de dados e execute o comando SQL abaixo (MySQL). Adicione também alguns registros de sementes.

CREATE TABLE news (


id int(11) NOT NULL AUTO_INCREMENT,
title varchar(128) NOT NULL,
slug varchar(128) NOT NULL,
text text NOT NULL,
PRIMARY KEY (id),
KEY slug (slug)
);
Agora que o banco de dados e um modelo foram configurados, você precisará de um método para obter todas as nossas
postagens do banco de dados. Para fazer isso, a camada de abstração do banco de dados incluída no CodeIgniter -
Query Builder - é usada. Isso torna possível escrever suas 'consultas' uma vez e fazê-las funcionar em todos os sistemas
de banco de dados suportados . Adicione o seguinte código ao seu modelo.

public function get_news($slug = FALSE)


{
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}

$query = $this->db->get_where('news', array('slug' => $slug));


return $query->row_array();
}

Com esse código, você pode executar duas consultas diferentes. Você pode obter todos os registros de
notícias ou obter um item de notícia por sua slug . Você deve ter notado que a $slug variável não foi
higienizada antes de executar a consulta; O Query Builder faz isso por você.

Exibir as notícias
Agora que as consultas foram gravadas, o modelo deve estar vinculado às visualizações que exibirão as
notícias para o usuário. Isso pode ser feito em nosso Pages controlador criado anteriormente, mas por uma
questão de clareza, um novo News controlador é definido. Crie o novo controlador em application / controllers /
News.php .

<?php
class News extends CI_Controller {

public function __construct()


{
parent::__construct();
$this->load->model('news_model');
$this->load->helper('url_helper');
}

public function index()


{
$data['news'] = $this->news_model->get_news();
}

public function view($slug = NULL)


{
$data['news_item'] = $this->news_model->get_news($slug);
}
}

Observando o código, você pode ver alguma semelhança com os arquivos que criamos
anteriormente. Primeiro, o __construct() método: chama o construtor de sua classe pai ( CI_Controller ) e carrega
o modelo, para que possa ser usado em todos os outros métodos neste controlador. Ele também carrega
uma coleção de funções do Auxiliar de URL , porque usaremos uma delas em uma exibição posteriormente.

Em seguida, existem dois métodos para exibir todos os itens de notícias e um para um item de notícia
específico. Você pode ver que a $slug variável é passada para o método do modelo no segundo método. O
modelo está usando essa slug para identificar o item de notícia a ser retornado.

Agora, os dados são recuperados pelo controlador através do nosso modelo, mas nada é exibido ainda. A
próxima coisa a fazer é passar esses dados para as visualizações.

public function index()


{
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';

$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}

O código acima obtém todos os registros de notícias do modelo e o atribui a uma variável. O valor do título também é
atribuído ao $data['title'] elemento e todos os dados são passados para as visualizações. Agora você precisa criar uma
exibição para renderizar as notícias. Crie application / views / news / index.php e adicione o próximo trecho de código.

<h2><?php echo $title; ?></h2>

<?php foreach ($news as $news_item): ?>

<h3><?php echo $news_item['title']; ?></h3>


<div class="main">
<?php echo $news_item['text']; ?>
</div>
<p><a href="<?php echo site_url('news/'.$news_item['slug']); ?>">View article</a></p>

<?php endforeach; ?>

Aqui, cada item de notícia é repetido e exibido ao usuário. Você pode ver que escrevemos nosso modelo em
PHP misturado com HTML. Se você preferir usar uma linguagem de modelo, poderá usar a classe Analisador
de Modelos do CodeIgniter ou um analisador de terceiros.

A página de visão geral das notícias está concluída, mas ainda está ausente uma página para exibir itens de
notícias individuais. O modelo criado anteriormente é feito de tal maneira que pode ser facilmente usado para
essa funcionalidade. Você só precisa adicionar algum código ao controlador e criar uma nova exibição. Volte
para o News controlador e atualize view() com o seguinte:
public function view($slug = NULL)
{
$data['news_item'] = $this->news_model->get_news($slug);

if (empty($data['news_item']))
{
show_404();
}

$data['title'] = $data['news_item']['title'];

$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}

Em vez de chamar o get_news() método sem um parâmetro, a $slug variável é passada, retornando o item de notícia
específico. As únicas coisas a fazer é criar a visualização correspondente em application / views / news /
view.php . Coloque o seguinte código neste arquivo.

<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];

Encaminhamento
Devido à regra de roteamento de curinga criada anteriormente, você precisa de uma rota extra para visualizar
o controlador que você acabou de criar. Modifique seu arquivo de roteamento ( application / config /
routes.php ) para que fique da seguinte maneira. Isso garante que as solicitações cheguem ao News

controlador em vez de ir diretamente para o Pages controlador. A primeira linha direciona os URIs com uma
slug para o view() método no News controlador.

$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

Aponte seu navegador para a raiz do documento, seguida de index.php / news e assista à sua página de notícias.
Criar itens de notícias
Agora você sabe como pode ler dados de um banco de dados usando o CodeIgniter, mas ainda não gravou
nenhuma informação no banco de dados. Nesta seção, você expandirá seu controlador de notícias e modelo
criado anteriormente para incluir essa funcionalidade.

Crie um formulário
Para inserir dados no banco de dados, você precisa criar um formulário no qual possa inserir as informações
a serem armazenadas. Isso significa que você precisará de um formulário com dois campos, um para o título
e outro para o texto. Você obterá a slug do nosso título no modelo. Crie a nova visão em application / views /
news / create.php .

<h2><?php echo $title; ?></h2>

<?php echo validation_errors(); ?>

<?php echo form_open('news/create'); ?>

<label for="title">Title</label>
<input type="text" name="title" /><br />

<label for="text">Text</label>
<textarea name="text"></textarea><br />

<input type="submit" name="submit" value="Create news item" />

</form>

Existem apenas duas coisas aqui que provavelmente lhe parecem estranhas: a form_open() função e
a validation_errors() função.

A primeira função é fornecida pelo auxiliar de formulário e renderiza o elemento do formulário e adiciona
funcionalidade extra, como adicionar um campo de prevenção de CSRF oculto. O último é usado para relatar
erros relacionados à validação de formulário.

Volte para o seu controlador de notícias. Você fará duas coisas aqui, verifique se o formulário foi enviado e
se os dados enviados foram aprovados nas regras de validação. Você usará a biblioteca de validação de
formulário para fazer isso.
public function create()
{
$this->load->helper('form');
$this->load->library('form_validation');

$data['title'] = 'Create a news item';

$this->form_validation->set_rules('title', 'Title', 'required');


$this->form_validation->set_rules('text', 'Text', 'required');

if ($this->form_validation->run() === FALSE)


{
$this->load->view('templates/header', $data);
$this->load->view('news/create');
$this->load->view('templates/footer');

}
else
{
$this->news_model->set_news();
$this->load->view('news/success');
}
}

O código acima adiciona muitas funcionalidades. As primeiras linhas carregam o auxiliar de formulário e a
biblioteca de validação de formulário. Depois disso, as regras para a validação do formulário são
definidas. O set_rules() método usa três argumentos; o nome do campo de entrada, o nome a ser usado nas
mensagens de erro e a regra. Nesse caso, os campos de título e texto são obrigatórios.

O CodeIgniter possui uma poderosa biblioteca de validação de formulário, conforme demonstrado


acima. Você pode ler mais sobre esta biblioteca aqui .

Continuando, você pode ver uma condição que verifica se a validação do formulário foi executada com
êxito. Caso contrário, o formulário é exibido, se foi enviado e aprovado em todas as regras, o modelo é
chamado. Depois disso, uma visualização é carregada para exibir uma mensagem de sucesso. Crie uma
visualização em application / views / news / success.php e escreva uma mensagem de sucesso.
Modelo
A única coisa que resta é escrever um método que grave os dados no banco de dados. Você usará a classe
Query Builder para inserir as informações e usar a biblioteca de entrada para obter os dados
publicados. Abra o modelo criado anteriormente e adicione o seguinte:

public function set_news()


{
$this->load->helper('url');

$slug = url_title($this->input->post('title'), 'dash', TRUE);

$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'text' => $this->input->post('text')
);

return $this->db->insert('news', $data);


}

Esse novo método cuida da inserção do item de notícias no banco de dados. A terceira linha contém uma
nova função, url_title (). Esta função - fornecida pelo auxiliar de URL - retira a string que você passa,
substituindo todos os espaços por traços (-) e garante que tudo esteja em caracteres minúsculos. Isso deixa
você com uma ótima slug, perfeita para criar URIs.

Vamos continuar preparando o registro que será inserido mais tarde, dentro da $data matriz. Cada elemento
corresponde a uma coluna na tabela do banco de dados criada anteriormente. Você pode perceber um novo
método aqui, ou seja, o post() método da biblioteca de entrada . Esse método garante que os dados sejam
higienizados, protegendo você de ataques desagradáveis de outras pessoas. A biblioteca de entrada é
carregada por padrão. Por fim, você insere nossa $data matriz em nosso banco de dados.

Encaminhamento
Antes de começar a adicionar itens de notícias ao seu aplicativo CodeIgniter, você deve adicionar uma regra
extra ao arquivo config / routes.php . Verifique se o seu arquivo contém o seguinte. Isso garante que o
CodeIgniter veja 'create' como um método em vez da slug de um item de notícias.

$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

Agora aponte seu navegador para o seu ambiente de desenvolvimento local onde você instalou o CodeIgniter e adicione
index.php / news / create à URL. Parabéns, você acabou de criar seu primeiro aplicativo CodeIgniter! Adicione algumas
notícias e confira as diferentes páginas que você criou.
Conclusão
Este tutorial não abordou todas as coisas que você poderia esperar de um sistema de gerenciamento de
conteúdo completo, mas apresentou os tópicos mais importantes de roteamento, controladores de gravação
e modelos. Esperamos que este tutorial tenha lhe dado uma visão de alguns dos padrões básicos de design
do CodeIgniter, sobre os quais você pode expandir.

Agora que você concluiu este tutorial, recomendamos que você verifique o restante da documentação. O
CodeIgniter é frequentemente elogiado por causa de sua documentação abrangente. Use isso para sua
vantagem e leia as seções "Introdução" e "Tópicos gerais" completamente. Você deve ler as referências de
classe e auxiliar quando necessário.

Todo programador intermediário de PHP deve ser capaz de pegar o jeito do CodeIgniter dentro de alguns
dias.

Se você ainda tiver dúvidas sobre a estrutura ou seu próprio código CodeIgniter, poderá:

 Confira nossos fóruns


 Visite nossa sala de chat do IRC
 Explore o Wiki

Você também pode gostar