IMPLEMENTANDO A ARQUITETURA MVC COM PHP 5.
por
em 07-07-2009 às 23:19 (26362 Visualizações)
Nesse artigo sobre o uso da arquitetura MVC com PHP 5 quero ser o mais simples possível evitando o exagero de termos técnicos para mostrar como implementar a arquitetura na linguagem PHP.
Para entender a arquitetura MVC e compreender esse tutorial leia o artigo: Entendendo a arquitetura MVC no link abaixo.
http://bobboy.wordpress.com/2009/07/...quitetura-mvc/
A primeira coisa a se fazer é projetar o software. Conheço vários desenvolvedores, que odeiam projetos de software, é só lamento.
No software iremos cadastrar clientes e mostrar os clientes cadastrados. Para isso criaremos o módulo cliente que tem os seguintes atributos:
+ID //identificação do usuário
+NOME //Nome do usuário
E os seguintes métodos
#setNome(nome) // seta um nome para o cliente
#setID(id) // seta uma identificação para o cliente
+all() // Retorna todos os clientes cadastrados
+intoCliente(cliente) // cadastra um novo cliente
Diagrama de Classe da aplicação.
http://bobboy.files.wordpress.com/2009/07/uml.png
Como iremos trabalhar com MVC, vamos criar uma pasta para o View, Controll, e Model
Siga a imagem abaixo:
http://bobboy.files.wordpress.com/2009/07/diretorio.png
Definimos as regras de negócios do Cliente fizemos o projeto agora vamos codificar nossa Class Cliente. Essa class será nosso modelo computacional, dentro da pasta model crie o arquivo class.cliente.php
<?php
//inclue o arquivo que faz a conexão com o banco de dados
require('../opemDB.php');
class Cliente {
public $nome;
public $id;
protected function setCliente($nome)
{
$this->nome = $nome;
}
protected function setId($id)
{
$this->id = $id;
}
//método que rotorna todos os clientes cadastrados
public function all()
{
$sql = "SELECT * FROM `cliente` WHERE 1";
//executa o SQL
$result = mysql_query($sql);
// o laço percorre todas a posições de um array contendo os dados dos clientes
//como nome e id
while($dados = mysql_fetch_array($result))
{
$cliente = new Cliente(); //<< instancia um objeto cliente para cada cliente que existe
//objeto cliente chama o método setID e passa os dados como um array de posição id
$cliente->setId(array('id' => $dados['id']));
//objeto cliente chama o método setNome e passa os dados como um array de posição nome
$cliente->setCliente(array('nome' => $dados['nome']));
//variavel $arr do tipo array para cada nova posição recebe o objeto cliente
$arr[] = $cliente;
}
//retorna o array com todos os objetos istanciados obs: cada registro um objeto
return $arr;
}
//método que faz o cadastro de um novo cliente
public function intoCliente($cliente)
{
$sql = "INSERT INTO `cliente` ( `id` , `nome` )
VALUES (NULL , '$cliente');";
mysql_query($sql);
}
}
?>
Dentro da pasta MVC que fica acima da pasta Model crie o arquivo opemDB.php, arquivo responsável por toda conexão com o banco de dados. Nesse exemplos estamos usando o MySQL como nosso SGDB. Então crie um banco de dados com as seguintes características abaixo segue um pseudo SQL:
id int (not nul) autoInc.
nome varchar (not null) 80 caracteres.
Codificação.
<?php
$local = '127.0.0.1';
$login = 'root';
$senha = '';
$banco = 'mvc';
mysql_pconnect($local, $login, $senha);
mysql_select_db($banco);
?>
Dentro da pasta control vamos criar o arquivo, class.control.cliente.php. Arquivo responsável por todo controle de nossa aplicação.
Codificação.
<?php
//inclue a Class cliente.
require('../model/class.cliente.php');
class Control {
public $control;
//método que faz o controle do método all() da class cliente
public function Controle()
{
//intancia um o objeto da class cliente
$this->control = new Cliente();
//retorna o método all() com os registros em formatos de objetos
//como vimos na class cliente.
return $this->control->all();
}
//método que faz o controle do método intoCliente() da class cliente
public function cadCliente($nome)
{
//recebe um valor na variavel nome se nome vazil retorna uma mensagen de erro
if($nome == '') {
print "Digite seu nome";
} else {
//se o nome não for vazil instancia um objeto da class cliente
$this->control = new Cliente();
//chama o método intoCliente enviando o nome();
$this->control->intoCliente($nome);
}
}
}
?>
Dentro da pasta view vamos criar o arquivo, index.php. Arquivo é o modelo humano de representação do modelo computacional.
Codificação.
<?php
//inclue a class Control no view
require('../control/class.control.cliente.php');
$nome = $_POST["nome"];
//instancia um objeto da class control
$cad = new Control();
//chama o método para cadastrar um novo cliente enviando seu nome
$cad->cadCliente($nome);
?>
<table cellpadding="3" cellspacing="3">
<form id="form1" name="form1" method="post" action="index.php">
<tr>
<td width="67" bgcolor="#99CC00">NOME</td>
<td width="168" bgcolor="#99FF00"><input type="text" name="nome" id="nome" /></td>
</tr>
<tr>
<td width="67" bgcolor="#FFFFFF"> </td>
<td width="168" bgcolor="#FFFFFF"><input name="enviar" type="submit" value="enviar" /></td>
</tr>
</form>
</table>
<table cellpadding="3" cellspacing="3">
<tr>
<td width="21" bgcolor="#99CC00">ID</td>
<td width="214" bgcolor="#99FF00">NOME</td>
</tr>
<?php
//instancia um novo objeto da class Control
$c = new Control();
//chama o método controle que retorna todos os registro dos clientes
$arr = $c->Controle();
//um laço que percorre todos os registro
// count($arr) retorna a quantidade de registros
for ($i = 0; $i < count($arr); $i++)
{
?>
<tr>
<td>
<?php
//imprime o id do cliente dentro da selula da tabela
print $arr[$i]->id['id'];
?>
</td>
<td>
<?php
//imprime o nome do cliente dentro da selula da tabela
print $arr[$i]->nome['nome'];
?>
</td>
</tr>
<?php
}
?>
</table>
Abra seu navegador de internet e digite: http://127.0.0.1/mvc/view/index.php e verá a seguinte imagen:
http://bobboy.files.wordpress.com/2009/07/img1.png
Agora você criou sua primeira aplicação usando MVC para web com PHP 5. para finalizar vou fazer alguns comentários
Na class control aonde é feito todo o controle de nossa aplicação um exemplo prático é o método cadCliente($nome), faz todo controle como verifificação se tudo estiver ok ele cria uma instancia do Model que no nosso caso é a class Cliente e faz o cadastro de um novo cliente. O objetivo central da arquitetura MVC como podemos observar é separar a visualização do modelo através do controle. Isso se resume em produtividade e facilidade na manutenção e portabilidade do código pos se um dia você quiser que o nome maria não seja incluído você faz essa verificação somente no controle sem alterar a visualização e nem o modelo computacional.
Vamos entender o $arr[$i]->nome['nome'];
$arr[$i] contem um objeto que é o objeto Cliente e através dele chamaos o atributo nome que é um array que tem uma posição nome.
Espero ter ajudado!!!.. Qual quer informação, elogio, reclamação é só dar sua opinião
Abraços..
Visitem meu blog oficial
http://bobboy.wordpress.com
Comentários
+ Enviar Comentário