Controller no Codeigniter
Trabalhando com controllers no CodeIgniter
Artigos PHP Trabalhando com controllers no CodeIgniter
O que é um Codeigniter Controller?
Neste artigo vamos falar sobre controllers do CodeIgniter. O CodeIgniter é baseado no modo de desenvolvimento Model-View-Controller. A MVC é uma abordagem de software que realiza a separação da lógica da aplicação de sua apresentação. Em prática, permite que nossas páginas web contenham o mínimo de script, já que a apresentação é separada do PHP.
Controller: Serve como um intermediário entre o Model, a View, e qualquer outro recurso necessário para processar a requisição HTTP e gerar a página web.
Com o CodeIgniter temos uma abordagem mais solta em relação ao MVC, já que models não são obrigatórios. Se não precisarmos desta facilidade, ou acharmos que manter models gerará mais complexidade do que queremos ou precisamos, podemos ignorá-los e construir nossas aplicações apenas usando Controllers e Views. O CodeIgniter também permite que possamos incorporar nossos próprios scripts, ou mesmo desenvolvermos bibliotecas para o sistema, nos possibilitando trabalhar de um modo que faça mais sentido para nós.
Controllers no Codeginiter
No CodeIgniter os controllers são o coração das nossas aplicações, pois determinam como as requisições HTTP devem ser trabalhadas.
Um controller é simplesmente um arquivo de classe que é nomeado de uma forma que possa ser associado a uma URL.
Vamos considerar a seguinte URL: http://localhost/post/index.php/inicial.
Neste exemplo, o CodeIgniter tentará encontrar um controller chamado "inicial.php" e o carregará
Quando um nome de um controller bater com o primeiro seguimento da URL, ele será carregado.
Testando o controller no codeigniter
Vamos agora criar um simples controller para que possamos vê-lo em ação. Crie um script chamado "inicial.php" e coloque nele o seguinte código.
Listagem 1: Exemplo controller simples
class Inicial extends CI_Controller
echo'Controller exemplo';
Salve esse arquivo dentro da pasta "application/controllers/".
Deve ser exibido o seguinte resultado no navegador.
Figura 1: Resultado Controller simples
É recomendável que o nome das classes controllers inicie com letra maiúscula, conforme o exemplo a seguir.
Listagem 2: Nome de classe da forma recomendada
E neste outro modo está incorreta.
Listagem 3: Nome de classe da forma não recomendada
E também sempre temos que ter certeza que nosso controlador estenda o controller pai, para que possa herdar todas as funções deste.
Funções do controller codeigniter
No exemplo anterior que criamos, o nome da função é index(). A função "index" é sempre carregada por default se o segundo segmento do URL estiver vazio. Outra maneira de mostrarmos nossa mensagem "Controller exemplo", poderia ser esta: http://localhost/post/index.php/inicial/index.
A segunda parte do seguimento da URL determina qual função no controller é chamada, vamos testar isso com o seguinte exemplo. Vamos adicionar a seguinte função dentro do nosso controller.
Listagem 4: Adicionando função comments no Controller
function comments ()
echo'Mensagem alternativa';
Agora carregue sua URL parecida com a seguinte para ver a função comments:
http://localhost/post/index.php/inicial/comments.
Figura 2: Exemplo mensagem alternativa função comments
Definindo o controller Default
Ao CodeIgniter podemos dizer para carregar o controller default quando não estiver explícito na URL, pois este será o caso quando apenas a URL raiz do nosso site é requisitada. Para especificarmos um controller default, vamos abrir o arquivo "application/config/routes.php" e alterarmos a seguinte variável.
Listagem 5: Definindo controller Default
$route['default_controller'] = "Inicial";
Onde inicial é o nome da classe controller que queremos usar. Agora se carregarmos nosso index.php geral, sem especificarmos nenhum segmento na URL, veremos a mensagem "Controller Exemplo": http://localhost/post/index.php/.
Figura 3: Index sem segmento
Remapeando a chamada funções
Como podemos notar acima, o segundo segmento da URL tipicamente indica qual função no controller será chamada. O CodeIgniter nós permite sobrepor este comportamento através do uso da função _remap().
Importante: se nosso controller contiver uma função chamada _remap(), ela sempre será chamada independente do que a nossa URL contenha. Ela sobrepõe o comportamento normal no qual a URL determina qual função será chamada, nos permitindo definir nossas próprias regras de roteamento de funções.
A chamada de função sobreposta (tipicamente o segmento do URL) será passada com um parâmetro à função _remap().
Listagem 6: Sintaxe da função _remap()
// chama a função gravar() somente se o método
// for "excluir"
if($method == "excluir")
$this->gravar();
echo "Está é a página principal";
function gravar(){
echo "Sou a função gravar";
echo "Sou a função excluir";
Nesse exemplo, sempre que utilizarmos o seguimento da URL "excluir", a função chamada sempre será "gravar" : http://localhost/post/index.php/inicial/excluir.
Figura 4: Mapeando chamada de função
Em alguns casos, podemos querer que certas funções não sejam acessadas publicamente. Para criarmos uma função privada, simplesmente adicionamos um underscore como prefixo do nome e ela não será servida via requisição URL, por exemplo, se tivermos uma função como a seguir.
Listagem 7: Função privada
echo "Testando função privada";
E se tentarmos acessa-la via requisição URL dessa forma, não funcionará:
http://localhost/post/index.php/inicial/_utility
Contrutores de classes
Se pretendermos utilizar um construtor em algum de nossos controlers, devemos colocar a seguinte linha de código: Parent::Controller().
A razão para esta linha ser necessária é porque nosso construtor local irá sobrepor aquele na classe controller pai, por isso a necessidade de chamarmos manualmente.
Se não estamos familiarizados com construtores no PHP4, um construtor é simplesmente uma função que tem o mesmo nome da classe e que é executada para criar uma instância desta.
Listagem 8: Construtor de classe
function Inicial ()
parrent::Controller();
Agora no PHP5 usamos a seguinte sintaxe.
Listagem 9: Construtor de classe PHP5
function construct ()
Construtores são muito úteis se desejamos definir alguns valores default ou executar um processo default enquanto uma classe é instanciada. Construtores não podem retornar um valor, mas podem executar algum trabalho default.
Organizando controllers codeigniter em subdiretórios
Se estivermos criando uma aplicação grande, podemos achar conveniente organizar os controllers em subdiretórios. O CodeIgniter nos permite que façamos isso. Simplesmente temos que criar subdiretórios em nosso diretório application/controllers e colocarmos nossos controllers dentro.
Observação: ao utilizamos esse recurso, o primeiro segmento da nossa URL precisará especificar o diretório. Por exemplo ,digamos que tenhamos um controller localizado assim: Apllication/controllers/artigos/ci.php.
Para conseguirmos chamar esse controller, nossa URL ficará parecida com a seguinte: http://localhost/post/index.php/artigos/ci.
Cada um de nossos subdiretórios poderá conter um controller default que será chamado se a URL contiver apenas um subdiretório. Simplesmente precisamos renomear nosso controller default no arquivo application/config/routes.php.
Nomes reservados de funções
Já que nossas classes controllers irão estender o controller principal da aplicação, precisamos tomar cuidado em não nomeá-las de forma idêntica àquelas usadas pela principal, caso contrário, nossas funções locais irão sobrescrevê-las. Seguie abaixo uma lista de nomes reservados. Não renomeie suas funções como uma destas:
E se caso estivermos rodando PHP4, ainda há nomes adicionais. Estes se aplicam apenas se estivermos utilizando PHP4:
_ci_initscaffolding
_ci_is_instace
Assim concluimos mais este artigo, resumidamente é isso que necessitamos saber sobre controllers. Espero que o artigo tenha sido de fácil compreensão a todos.