Models, Views e Controllers trabalhando juntos no CodeIgniter

24 de maio de 2010, em Passos Iniciais, por

Models, Views e Controllers trabalhando juntos no CodeIgniter

Já vimos no CodeIgniter Brasil artigos sobre Models, Views e Controllers, separadamente. Para projetos “da vida real”, no entanto, todos estes trabalham conjuntamente e é preciso “juntar as peças” para entender como se dá este funcionamento. Neste artigo, apesar de ainda não ser um projeto “oficial”, veremos como fazer Models, Views e Controllers trabalharem juntos no CodeIgniter!

O Model

Vamos supor que existe um banco de dados de um sistema de blog feito em CI. Vamos supor, ainda que uma das funções desse model, “Blog_model”, serve para pegar “N” registros do BD para se exibir onde se queira. Seria algo como:

1
2
3
4
5
function get_posts($n)
{
    $query = $this->db->query('SELECT title, content, slug FROM posts LIMIT ' . $n);
    return $query->result();
}

Obviamente este seria somente um fragmento de códigos. Se estiver com dúvidas, vide o artigo sobre Models no CodeIgniter.

O Controller

Nosso controller, “Blog”, dentre outras coisas, possui uma função para se valer do respectivo model:

1
2
3
4
5
6
7
8
function index()
{
    $this->load->model('Blog_model');    	
    $data['title'] = 'Blog de Testes do CodeIgniter';
    $data['posts'] = $this->Blog_model->get_posts(5);
 
    $this->load->view('blog_index', $data);
}

Como vimos no artigo sobre Controllers no CodeIgniter, é possível passar dados a views por um array ou objeto no segundo parâmetro da função de carregar o view.

O View

No view, tratamos os valores do array passado como se fossem variáveis “comuns”. No caso de $posts, já que um conjunto de dados virá do BD, realizar um foreach, conforme explicado no artigo sobre Views no CodeIgniter.

1
2
3
4
5
6
<h1><?php echo $title ?></h1>
 
<?php foreach($posts as $p): ?>
    <h1><a href="/blog/<?php echo $p->slug ?>"><?php echo $p->title ?></a></h1>
    <?php echo $p->content ?>
<?php endforeach ?>

Conclusão

A conclusão é que é muito fácil trabalhar com CodeIgniter (e olha que nem começamos a apresentar as classes e libraries nativos)! Viram como separando o contato com o banco de dados (model), a lógica (controller) e a apresentação (view) é muito mais simples e organizado de se programar?

A separação que o MVC proporciona é incrível e confere uma também incrível facilidade de se manutenir, em separado cada uma das “partes” que constituem o site, software, sistema online ou o que quer que se faça usando CodeIgniter!

É por isso que não cansamos de repetir que o CodeIgniter é o melhor framework PHP!

34 comentários em "Models, Views e Controllers trabalhando juntos no CodeIgniter"

gravatar

Abdullah Al Mamun  em 25 de maio de 2010

The most useful tutorial in this series.
Keep up this great work.

gravatar

Tárcio Zemel  em 25 de maio de 2010

@ Abdullah Al Mamun
Nice you liked! Stay tuned in CodeIgniter Brasil for more hot topics! ;-)

gravatar

Matheus  em 25 de maio de 2010

não me vejo hoje trabalhando sem a arquitetura MVC e o CodeIgniter foi o framework PHP que melhor me adaptei até agora!

Os assuntos dos tutoriais a partir de agora vão ficar mais interessantes pois pelo ótimo nível dos posts, os assuntos mais "profundos" vão ser bem explicados e explorados.

Parabéns

gravatar

Tárcio Zemel  em 27 de maio de 2010

Obrigado, Matheus! Realmente, a partir de agora, a tendência é fazer coisas mais elaboradas, mais condizentes aos projetos da "vida real". Aguardamos sua participação!

gravatar

Ricardo dos Santos  em 28 de maio de 2010

Cara,

Ta tudo muito bom… o projeto que comecei… já to colocando no ar usando o CodeIgniter…

E os seus posts estão ajudando muito, já que sou iniciante no CI…

E agora ainda mais… com interação com banco…

Valeu pela ajuda…

Continue com o bom nível dos posts…

T+

gravatar

Tárcio Zemel  em 31 de maio de 2010

Que bom que os artigos estão ajudando, Ricardo! Espero que continue os estudos e apareça no CIB para comentar mais! ;-)

gravatar

José Neto  em 8 de junho de 2010

Parabéns!!! Li todos os posts só hoje :D
Aguardo os próximos!!!!

gravatar

Tárcio Zemel  em 11 de junho de 2010

Bom que gostou, José! Aguardo você nos próximos artigos! ;-)

gravatar

Fernando Vargas  em 28 de agosto de 2010

Ola pessoal estou iniciando como programador tenho alguns sites desenvolvidos e estou muito interessado em começar a usar o codeiginiter mas nao estou conseguindo sair do chão. Li sobre as configurações e elas estao feitas… mas e agora qual o próximo passo?

gravatar

Tárcio Zemel  em 29 de agosto de 2010

Recomendamos a leitura de nossa categoria Passos Iniciais, na qual é possível encontrar artigos que explicam esses primeiros passos que você está buscando. Abraços!

gravatar

Tárcio Zemel  em 1 de fevereiro de 2011

Obrigado! ;-D

gravatar

Tárcio Zemel  em 1 de fevereiro de 2011

Leia todos os artigos da seção "Passos Iniciais", na ordem, que você vai conseguir pegar a base.

gravatar

Kadu de Souza  em 25 de fevereiro de 2011

Poxa Tarcio, é impressionante como você responde a todos os comentários, parabéns de verdade!
Um amigo me indicou o CI (David do videoaulasbrasil.com.br conhece?), me disse que era um framework bacana para se trabalhar e quando fui procurar encontrei seu blog…
Tive muita sorte…. ;-)
Parabéns pelo trabalho!

gravatar

Tárcio Zemel  em 28 de fevereiro de 2011

Eu tento responder a todos, mesmo, que bom que está sendo do agrado! ;-)

Não conhecia o site, mas dei uma olhada rápida e encontrei alguns vídeos interessantes; depois vou assistir.

Obrigado e abraços!

gravatar

Fabricio Cruz  em 30 de março de 2011

Olha, muito bom o site…. muito bom o conteudo… gostei muito do FW CI…. como o amigo lá em cima disse.. eu realmente nao consegui parar de ler os posts….

Continue assim!!!!

Obrigado

gravatar

mauricio  em 31 de março de 2011

Alguem sabe a solucao para o erro: Object of class stdClass could not be converted to string,
agradeço.

gravatar

Tárcio Zemel  em 4 de abril de 2011

Muito obrigado, Fabricio! Abraços e contamos com sua participação em artigos futuros!

gravatar

Tárcio Zemel  em 4 de abril de 2011

A pergunta foi bastante genérica, mas tente dar uma olhada neste tópico do fórum oficial do CodeIgniter.

gravatar

mauricio  em 5 de abril de 2011

Obrigado, trata-se de um get que fiz no mysql, nao consigo percorrer o array com o foreach, retorna esse erro acima… porem quando uso o print_r() o array aparece perfeitamente…

gravatar

Ivini  em 17 de agosto de 2011

Esse site ta me ajudando a beça, são ótimos os posts aqui escritos. parabéns!

gravatar

Tárcio Zemel  em 22 de agosto de 2011

Que bom que estão ajudando Ivini! Assine o feed para saber quando saírem novos artigos!

gravatar

PauloLinhares9  em 5 de janeiro de 2012

Me deparei com uma necessidade de passar dois parâmetros separados a uma views. Ex: $this->load->view('exemplo', $params1, $params2);

Existe essa possibilidade ? testei aqui , mas não funfou ! Grato!

gravatar

Tárcio Zemel  em 7 de janeiro de 2012

Passar 2 variáveis, seria isso? Se for, no exemplo do artigo já mostra (é colocando os valores num array).

gravatar

Francis  em 12 de maio de 2012

Este é o básico que eu procurava :D

gravatar

ketlin  em 24 de junho de 2012

Cara, muito bons seus posts, estou apendendo bastante com eles…. mas tenho cá uma duvida que esta a me tirar o sono, ficaria grata se vc pudesse me ajudar…

o que acontece é o seguinte, tenho uma view que passa um array para um função do controller, assim<a href='<?php echo site_url("login/index/".$array = array('valor1' => 1, 'valor2' => 2, 'valor3' => 3 ))?>' Teste

Como não funcionou, dei um echo no controller, e vi que ele esta mandando á um valor "A", mesmo eu passando esse 1 para cada campo do array….

Poderia me ajudar com isso… por que algumas coisas não funcionam como no php puro, como isso por exemplo?

Grata pela pela ajuda.

gravatar

Tárcio Zemel  em 29 de junho de 2012

No meio do seu echo(), você está atribuindo valores a variáveis… Realmente, isso não funciona!

Tente passar o valor do link pronto para a view a partir do controller.

Att

gravatar

Allan  em 11 de junho de 2013

Boa tarde, estou iniciando meus estudos com CI, e estou com um problema,
quando retorno o resultade do getAll para minha view e dou um prinr_r aparece um array de objetos do tipo stdClass, mas quadno vou exibir os item num foreach da um erro dizendo: Undefined property: stdClass::$nome, alguem pode me ajudar ?:)

gravatar

Francis  em 31 de julho de 2013

Muito fácil, muito fácil mesmo :D
Eu sempre volto aqui pra lembrar como é fácil se trabalhar com esse framework.

Antes de conhecer o CodeIgniter eu pensava em criar uma estrutura assim.
Tenho conhecimento MVC mas não sou bom o bastante pra criar minha própria padronização e arquitetura MVC então decidi estudar um framework fácil capaz de rodar em instantes e encontrei este belíssimo FW. :)

gravatar

Flávio Henrique  em 15 de maio de 2014

Olá eu estou com dificuldades de passar um parametro para a view usando um array já tentei de diversas formas mas não to conseguindo… o codeigniter mostra que o parametro não está sendo reconhecido na view e da erro no meu foreach também.

Agradeço desde já a qualquer ajuda!

Deixo os fragmentos de código pra vc dar uma olhada…

Model
public function getSecretaria(){
return $this->db->get('secretaria')->result();
}

Controller
function secretaria(){
$this->load->model('usuarios');
$dados['secretarias'] = $this->usuarios->getSecretaria();
$this->load->view('usuarios', $dados);

}

View

$options = array ('' => 'Escolha');
foreach($secretarias as $secretaria)
$options[$secretaria->id] = $secretaria->nome;
echo form_dropdown('secretaria', $options);

ERROS:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: secretarias

Filename: painel/usuarios.php

Line Number: 54

A PHP Error was encountered

Severity: Warning

Message: Invalid argument supplied for foreach()

Filename: painel/usuarios.php

Line Number: 54

gravatar

FaBii  em 20 de setembro de 2015

Superbly ilnilumating data here, thanks!

gravatar

William  em 17 de junho de 2017

Conseguiu resolver isso?
Esrou com o mesmo problema…

Comente!