Depois de algum tempo abordando outros assuntos, hoje iremos retornar à nossa série de publicações sobre o framework CodeIgniter. Nesse post veremos as regras das Views e como implementá-las utilizando o CI.
A View (V da sigla MVC) é a camada de apresentação em uma aplicação que utiliza o padrão MVC. Ela é responsável por exibir o código front-end (HTML, CSS, JS, etc) ao usuário. As Views nunca devem ser chamadas diretamente. Elas são carregadas à partir dos Controllers.
Aliás, antes de continuar lendo esse post, recomendo que dê uma olhadinha no post que falo sobre Controllers (http://www.rafaelwendel.com/2013/02/codeigniter-controllers/).
Criando uma view
Antes de começar, é bom relembrar que o meu projeto está hospedado em http://localhost/ci
Crie um novo arquivo dentro da pasta application/views/ chamado usuariosview.php
Dentro desse arquivo vamos implementar uma estrutura básica de tags html.
1 2 3 4 5 6 7 8 | <html> <head> <title>View de Usuários</title> </head> <body> <h1>View de Usuários</h1> </body> </html> |
Pronto! A view serve para isso mesmo. Para exibir o html ao usuário.
Agora vamos criar um controller que será o responsável pela chamada dessa view.
Vá até a pasta application/controllers/ e crie um arquivo chamado usuarios.php
1 2 3 4 5 6 7 8 9 10 11 | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Usuarios extends CI_Controller { public function index() { /* Carrega a view */ $this->load->view('usuariosview'); } } /* End of file usuarios.php */ /* Location: ./application/controllers/usuarios.php */ |
Veja que a action index() é responsável pela chamada da view. Logo, quando esse controller for executado (pela URL: http://localhost/ci/usuarios) ele chamará a view (pelo método $this->load->view() ) usuarioview, que será exibida ao usuário.
Ótimo! Agora temos uma arquitetura onde existe um responsável pelo fluxo das informações e outro pela apresentação.
Passando dados do Controller para a View
Diversas vezes haverá a necessidade de passar algum tipo de dado do Controller para a View. É assim que a aplicação se tornará dinâmica. Essas informações que são transmitidas pode ser algo estático ou dinâmico, como o resultado de uma consulta ao banco de dados.
Para enviar algum tipo de dado para ser exibido na View, basta armazená-lo(s) dentro de um array e passar esse array no segundo parâmetro do método $this->load->view
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Usuarios extends CI_Controller { public function index() { $dados['nome'] = 'Rafael'; $dados['site'] = 'www.rafaelwendel.com'; /* Carrega a view e passa a variável $dados no segundo parâmetro */ $this->load->view('usuariosview', $dados); } } /* End of file usuarios.php */ /* Location: ./application/controllers/usuarios.php */ |
A partir do array serão criadas variáveis com o mesmo nome dos índices do array e seus respectivos valores. Essas variáveis podem ser utilizadas normalmente dentro da view (Linhas 7 e 8).
1 2 3 4 5 6 7 8 9 10 | <html>
<head>
<title>View de Usuários</title>
</head>
<body>
<h1>View de Usuários</h1>
<p>Nome: <?php echo $nome ?></p>
<p>Site: <?php echo $site ?></p>
</body>
</html> |
Fique à vontade para passar arrays e objetos do Controller para a View se for necessário.
Criando uma estrutura de template
É comum acontecer de termos templates onde o cabeçalho e o rodapé são sempre os mesmos e só muda o conteúdo de uma página para outra. Logo, para evitar repetição de códigos, você cria esses arquivos na pasta view separadamente (header.php e footer.php por exemplo) e para cada página você cria apenas os códigos específicos. No Controller, você pode chamar quantas views quiser.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Usuarios extends CI_Controller { public function index() { $dados['nome'] = 'Rafael'; $dados['site'] = 'www.rafaelwendel.com'; /* Carrega cada parte da página separadamente */ $this->load->view('header'); $this->load->view('usuariosview', $dados); $this->load->view('footer'); } } /* End of file usuarios.php */ /* Location: ./application/controllers/usuarios.php */ |
E assim terminamos o post de hoje.
Se houver alguma dúvida escreva-a na caixa de comentários.
Abs!
Confira todos os posts da série CodeIgniter Framework
- Introdução ao CodeIgniter Framework
- CodeIgniter – URLs
- CodeIgniter – Controllers
- CodeIgniter – Rotas
- CodeIgniter – Views
- CodeIgniter – Models (Parte I)
- CodeIgniter – Models (Parte II)
- CodeIgniter – Models (Parte III) – Consultas Complexas
Boa Rafael. !! tenho uma situação e queria saber se consegue me ajudar,…
Tenho o seguinte trecho de código (Controller)
$this->data[‘total_links’] = $this->links->getCount($criterios);
No meu header.php chamos o resultado assim:
Até aqui tudo certo,…
O problema é que,… quando insiro meu header numa view (load->view(‘site/header’); ?>) esse echo não vem. Dá a mensagem de erro: Message:
Undefined variable: total_links
Filename: campo/header.php
Sabe o que pode ser?
Boa Rafael!! tenho uma situação e queria saber se consegue me ajudar,…
Tenho o seguinte trecho de código (Controller)
$this->data[‘total_links’] = $this->links->getCount($criterios);
No meu header.php chamos o resultado assim: echo $total_links;
Até aqui tudo certo,…
O problema é que,… quando insiro meu header numa view ( $this->load->view(‘site/header’); ) esse echo não vem. Dá a mensagem de erro: Message:
Undefined variable: total_links
Filename: campo/header.php
Sabe o que pode ser?
( o anterior ficou desformatado devido as tags do php)
Wanderley,
Você chama o arquivo “header” a partir de um controller ou a partir de uma outra view? Se chamar a partir do controller, tem que passar a variável no segundo parâmetro. Ex: $this->load->view(‘site/header’, $this->data);
Abs!
Olá Rafael,
Gostaria de saber como acessar uma view se ela estiver dentro de uma pasta;
Exemplo:
Pasta -> subpasta -> Arquivo
Views ->usuarios -> usuario_view.php
Olá Alisson,
É só incluir as “barras” na hora de chamar a view.
Abs!
Obrigado pelo retorno, vou fazer os devidos teste com a dica. Obrigado!