Ver Feed RSS

bobboyms

IMPLEMENTANDO A ARQUITETURA MVC COM PHP 5.

Avaliação: 6 votos, 3,83 média.
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">&nbsp;</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
Categorias
Não Categorizado

Comentários


+ Enviar Comentário