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.
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!
Qualquer problema ou dúvida, fique a vontade nos comentários.
Simples, não? É Kohana!
E é por isso que eu gosto :)