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!
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 :)
Muito bom tutorial, continue com mais
mto bom
Ta faltando algo nesse tutorial aí: a classe Controller, não rodou por falta dessa classe!
Mais uma coisa o diretorio "controllers" dentro do diretorio "application" não existe, eu tive que cria-lo.
Andre, tudo bem?
Na verdade, o diretório é controller (já corrigi no artigo)
Falando da classe Controller, pode me mostrar qual erro ocorreu com você? Posso tentar te ajudar.
Abraço!
Heim.. tudo jóia!?
deu um errinho aqui que, eh o seguinte : Cannot redeclare class Controller_Artigos…
nao precisa dar um new na classe ?
sei la
so muito novo e não manjo muito ainda…
abraços!
Tudo bom Eduardo?
A mensagem "Cannot redeclare class …" ocorre porque você já tem uma classe Controller_Artigos.
No exemplo, estamos sempre falando do mesmo arquivo para a classe Controller_Artigos :)
Abraço!
Heim marcelo…
eu observei a figura no começo da sua publicação
e o Model não retorna dados para o Controller tbm????
Valeu.
Isso mesmo :)
Quase todos os fluxogramas explicando o MVC estão errados na internet.
Como eu peguei esse rapidamente em algum lugar, tem também este erro *rs
Foi até um ponto que comentei na minha palestra sobre o Kohana na última phpSCconf.
Vou atualizar a imagem lá, valeu o toque!
olha que estranho : )….
se colocar " class Controller_Artigos" não da certo, da aquele erro
e se eu colocar "class Artigos_Controller" da certinho!
:D
vlw!
Tá "dando certo" porque você não está mais redeclarando a classe :)
O correto é ter somente uma classe com o mesmo nome. Veja a correção sugerida no comentário anterior.
Abraço!
Parecem ser tão fáceis como usar no CodeIgniter. Não entendo porque no Zend Framework ou no CakePHP tudo parece mais difícil. Bom artigo .
Fala Marcelo! Ví sua palestra no PhpSc Conf. e a partir disso me interessei muito pelo Kohana. Programo em php a apenas 1 ano. Tenho acompanhado seu blog com frequencia aguardando mais tutoriais. Se possível poste algo exemplificando uma pequena aplicação para listar, adicionar, editar e excluir artigos. Creio que isso ajudaria muito iniciantes como eu para entender na prática o relacionamento MVC. Abraço!!
Que venha mais tutoriais do Kohana estou gostando.
Fala Marcelo! Ví sua palestra no PhpSc Conf. e a partir disso me interessei muito pelo Kohana. Programo em php a apenas 1 ano. Tenho acompanhado seu blog com frequencia aguardando mais tutoriais. Se possível poste algo exemplificando uma pequena aplicação para listar, adicionar, editar e excluir artigos. Creio que isso ajudaria muito iniciantes como eu para entender na prática o relacionamento MVC. Abraço!!