CodeIgniter – Controllers

Continuando com nossa série sobre o framework CodeIgniter, hoje falaremos sobre os Controllers, que são as classes responsáveis por controlar o fluxo de informações dentro de nossa aplicação.

Depois de acompanhar esse post você estará apto a criar e organizar os seus próprios controllers e actions no CI.

Para começar, é bom ressaltar que devemos sempre criar nossas classes de controle dentro do diretório controllers da pasta da nossa aplicação (application). De forma nativa o CI já vem com o controller welcome.php criado. É ele que nos dá uma mensagem de boas-vindas quando ainda não implementamos nada em nossa app.

O que é um Controller?

Controller é representado pela letra “C” na sigla MVC. É o responsável por controlar quais e como as informações serão apresentadas para o usuário. Imagine a seguinte URL

www.seusite.com/noticias

Nesse exemplo, o CI procura o arquivo noticias.php dentro da pasta controllers e executa o que estiver implementado nele.

Criando nosso primeiro controller

Crie dentro da pasta controllers um arquivo chamado noticias.php. E nesse arquivo implemente o seguinte código.

1
2
3
4
5
6
7
8
9
10
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Noticias extends CI_Controller {
       public function index()
       {
            echo 'Bem vindo a pagina de Noticias';
       }
}
/* End of file noticias.php */
/* Location: ./application/controllers/noticias.php */

O CI recomenda que criemos o nome do arquivo controller com letras minúsculas (noticias.php) e a classe com o mesmo nome porém com a primeira letra maiúscula (Noticias). Quando o segundo parâmetro da URL (action) não é informado o CI executará método index().

Outra observação importante é ressaltar que todos os nossos controllers devem extender a classe nativa CI_Controller.

Agora vamos criar outro método(action) dentro do nosso controller.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Noticias extends CI_Controller {
       public function index()
       {
            echo 'Bem vindo a pagina de Noticias';
       }
 
       public function esportes()
       {
            echo 'Noticias de Esportes';
       }
}
/* End of file noticias.php */
/* Location: ./application/controllers/noticias.php */

Quando a URL www.seusite.com/noticias/esportes for executada o CI buscará o controller Noticias e executará o método esportes(), exibindo assim as notícias relacionadas à esse tema.

Como vimos no último post (https://www.rafaelwendel.com/2013/01/codeigniter-url-s/), é possível trabalhar com parâmetros nos métodos (actions) dos controllers. Vamos implementar o método ler($id) onde a partir do codigo será buscado a notícia correspondente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
class Noticias extends CI_Controller {
       public function index()
       {
            echo 'Bem vindo a pagina de Noticias';
       }
 
       public function esportes()
       {
            /* Carrega as noticias de esportes */
            echo 'Noticias de Esportes';
       }
 
       public function ler($id)
       {
            /* Busca a notícia referente ao código informado na var $id */
            echo 'Noticias de codigo ' . $id;
       }
}
/* End of file noticias.php */
/* Location: ./application/controllers/noticias.php */

Assim, a URL www.seusite.com/noticias/ler/1 

Fique à vontade para implementar quantos parâmetros forem necessários.

Alterando o Controller default

No primeiro post verificamos que por padrão o controller welcome é chamado quando a app é executada. Mas isso pode ser alterado. Abra o arquivo application/config/routes.php e altere o $route[‘default_controller’] para o controller noticias que acabamos de criar.

41
$route['default_controller'] = "Noticias";

Execute seu projeto e se tudo estiver certo você vai verificar que o controller que implementamos já está sendo mostrado como página principal do projeto. Execute também os outros métodos criados. (Lembrando que no meu caso o projeto está hospedado em localhost/ci/)

Pagina de notícias: http:// localhost/ci ou http://localhost/ci/noticias

Página de esportes: http://localhost/ci/noticias/esportes

Página de única notícia: http://localhost/ci/noticias/ler/1

No próximo capítulo veremos como criar rotas personalizadas para nossos controllers.

Abs!

Confira todos os posts da série CodeIgniter Framework

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. Brother gostei muito do tutorial, me ajudou bastante a esclarecer muitas dúvidas, porém tive um pequeno problema, os dados não foram inseridos no meu banco, não fiz nenhuma alteração no código a não ser da conexão do banco. Usei o método get pra saber se as variáveis estavam recebendo os valores, e sim estavam mas não inseriu e não consegui resolver. Inserir 1 registro pelo banco mesmo para listar o produto mas aconteceu o seguinte erro:
    A PHP Error was encountered
    Severity: Notice
    Message: Undefined variable: produtos
    Filename: views/listar_produtos.php
    Line Number: 9
    Backtrace:
    File: C:\xampp1\htdocs\CodeIgniter\application\views\listar_produtos.php
    Line: 9
    Function: _error_handler
    File: C:\xampp1\htdocs\CodeIgniter\application\controllers\usuario.php
    Line: 10
    Function: view
    File: C:\xampp1\htdocs\CodeIgniter\index.php
    Line: 292
    Function: require_once

    Não consegui resolver também, sou iniciante com MVC e to com algumas dificuldade de entender o conceito pois explicam de maneira muito abstrata pra mim, de qualquer maneira agradeço pois esse tutorial me ajudou bastante!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *