Controllers no Kohana 3

Um controller é um arquivo que contém uma classe que vai gerenciar todo o fluxo da aplicação.Se você não conhece MVC, é uma boa hora para estudar porque o Kohana é todo MVC.

MVC

Os controllers comunicam-se diretamente com os models enviando e recebendo informações, muitas das informações recebidas são repassadas as views para serem renderizadas no navegador do usuário, e podem também ser recebidas das views dentro dos controllers para serem processadas pelos models novamente.

Enfim, deu pra perceber que o controller é quem controla o fluxo de informações e da aplicação :)
Trabalhar com Controllers no Kohana é muito fácil, vamos ver como:

Convenções para Controllers

  • O arquivo deve ser gravado em application/controller
  • O nome do arquivo deve ter o mesmo nome da classe, em minúsculo.
    Exemplo: artigos.php
  • O nome da classe deve conferir com o nome do arquivo, iniciada de Controller_ e com a primeira letra em maiúsculas.
    Exemplo: Controller_Artigos
  • A classe deve ser extendida do Controller base (ou de outro controller).
    Exemplo: Controller_Artigos extends Controllers
  • Os métodos que serão acessíveis pela URL devem ser públicos e precedidos por _action.
    Exemplo: public function action_todos()

Acessando e Requisitando um Controller

Por padrão, o acesso a um controller é feito da seguinte forma:

http://dominio.com/index.php/<controller>/<action>

Então para acessarmos o controller artigos e a action todos, nosso exemplo ficaria assim:

http://dominio.com/index.php/artigos/todos

Criando um Controller

Seguindo nosso exemplo, vamos criar um controller artigos:

application/controller/artigos.php
class Controller_Artigos extends Controller
{
  public function action_index()
  {
    $this->request->response = "A resposta para a vida, o universo e tudo mais é 42!";
  }
}

Acessando http://dominio.com/index.php/artigos/index (ou dominio.com/artigos/ porque a action_index é a padrão, por default) teremos o seguinte resultado:

A resposta para a vida, o universo e tudo mais é 42!

Recebendo Parâmetros via URL

Como o controller é responsável pelo fluxo de informações dentro da aplicação, uma das grandes utilidades é receber informações. Uma das formas mais simples é via URL. Vamos aprimorar nosso exemplo, solicitando artigos pelo seu número:

class Controller_Artigos extends Controller
{
  public function action_index()
  {
    $this->request->response = 'A resposta para a vida, o universo e tudo mais é 42!';
  }

  public function action_ver($numero=0)
  {
    // Rotina para pesquisar artigos
    // {...}
    $this->request->response = "Você solicitou o artigo número $numero";
  }
}

No exemplo acima, acessando http://dominio.com/index.php/artigos/ver/12 teremos o seguinte retorno:

Você solicitou o artigo número 12

Funções Privadas em Controllers

Em determinadas situações precisamos manter algumas funções disponíveis como public mas não queremos que elas sejam acessadas pela URL, neste caso é só não usar o prefixo action_ no nome da function.

class Controller_Artigos extends Controller
{
  public function megasena()
  {
    $this->request->response = 'Os números da megasena são ...';
  }
}

E assim se tentarmos acessar http://dominio.com/index.php/artigos/megasena não teremos acesso a esta função dentro do controller, como esperado!

Conclusão

Nos próximos tutoriais do Kohana vamos trabalhar com Views, Models e depois a troca de informações entre eles.
Qualquer problema ou dúvida, fique a vontade nos comentários.

Simples, não? É Kohana!
E é por isso que eu gosto :)