Em artigos anteriores já vimos de maneira geral o que eram os modelos, quando explicamos o Modelo - Visão - Controlador (MVC), assim que agora vamos ver como CodeIgniter os gerencia. Não obstante, vale dizer que os modelos no MVC são os módulos que têm como responsabilidade o acesso e o controle dos dados que há em bases de dados e mantêm encapsuladas todas as particularidades e complexidades dos acessos às tabelas para realizar qualquer tipo de operação.
Ao se centralizarem todas as ações sobre a base de dados por meio dos modelos, nos controladores podemos esquecer do complexa ou simples que é nossa base de dados, inclusive de que tipo de base de dados tem o servidor com que estamos trabalhando.
No padrão MVC, os modelos são uma das partes fundamentais porém, no caso de CodeIgniter, seu uso é só opcional. O desenvolvedor é o responsável por decidir se é vantajoso o uso dos modelos ou se prefere realizar suas aplicações fazendo qualquer tipo de operação sobre a base de dados nos próprios controladores.
Os modelos, como dizíamos, conterão uma série de funções ou métodos para realizar as operações típicas. Por exemplo, pensemos em uma aplicação que tem que trabalhar com usuários. Então teremos um modelo de usuários que terá uma série de funções, como a seleção de usuários, inserção, atualização. Nossa aplicação geralmente terá vários modelos, para trabalhar com cada uma das entidades de nossa base de dados.
Aqui podemos ver um exemplo de modelo em CodeIgniter, embora incompleto, que pode nos dar alguma ideia. Pode valer a pena dar uma olhada, mesmo que não o entendamos totalmente. Não há que se preocupar, pois em breve explicaremos cada uma de suas partes em detalhes.
class Usuario_model extends Model {
function __construct(){
parent::Model();
}
function existe_email($email){
$this->db->select('email_usuario');
$this->db->where('email_usuario', $email);
$query = $this->db->get('usuario');
if ($query->num_rows() > 0){
return 1;
}
return 0;
}
function usuario_login($email){
$this->db->where('email_usuario', $email);
//$this->db->where('chave', md5($chave));
$query = $this->db->get('usuario');
if ($query->num_rows() > 0){
return $query->row();
}
return 0;
}
function insere_usuario($dados = array()){
if(!$this->_required(array("email_usuario","clave"), $dados)){
return FALSE;
}
//chave, encripto
$dados['clave']=md5($dados['clave']);
$this->db->insert('usuario', $dados);
return $this->db->insert_id();
}
}
Este seria o modelo mais básico, que está vazio, já que não tem nenhuma função para operar com a base de dados. Mostramos primeiro o código básico de um modelo em PHP 5, onde os construtores têm o nome __construct().
class Nome_model extends Model {
function __construct(){
parent::Model();
}
}
Agora vejamos como seria o modelo básico em PHP 4, onde os modelos teriam uma pequena diferença, dado que os construtores na versão 4 de PHP têm sempre o mesmo nome da própria classe.
class Nome_model extends Model {
function Nome_model(){
parent::Model();
}
}
Os modelos devem ser salvos na pasta "system/application/models/". O nome de arquivo do código do modelo deve ter extensão .php e tem de ser de escrito com todas as letras em minúsculas. Por exemplo, nosso modelo, cuja classe se chama "Nome_model", deveríamos salvá-lo na rota:
system/application/models/nome_model.php
Se desejarmos, podemos organizar nossos modelos por subdiretórios, sempre dentro da pasta "system/application/models/". Quando os carreguemos só teremos que indicar em que pasta estão localizados.
No artigo seguinte ampliaremos esta informação e mostraremos como utilizar os modelos em uma aplicação web, carregando-os a partir dos controladores e invocando seus métodos para o acesso às tabelas. Mais tarde, veremos como configurar CodeIgniter para dizer-lhe qual é o nosso servidor de base de dados, o nome da base de dados a ser utilizada e outros dados de acesso, para que o próprio Framework possa fazer conexões a partir dos modelos.