CodeIgniter – Views

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

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. 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?

  2. 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)

    1. 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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *