Back-End

23 out, 2009

Qualidade e Produtividade com MVC em PHP

Publicidade

Como Arquiteto de Software não posso deixar de olhar para as outras
soluções que estão fora do mundo Java. Desenvolver um sistema em Java
pode trazer diversas vantagens, mas também pode trazer complexidade e
custo desnecessário.

Aplicações para empresas de pequenas e médio tamanho consideram o
uso de PHP como solução para seus sistemas web. Dependendo das
características e dos requisitos do sistema, o PHP é uma
ótima solução. A evolução dos frameworks MVC em PHP foi muito boa
nestes últimos anos.

O que é MVC mesmo?

É um padrão de arquitetura de software largamente utilizado em
soluções para Web. Sua principal vantagem é a separação das telas (view)
da camada de negócio (model). Você pode usar MVC em um sistema desktop;
dependendo do sistema, será uma boa escolha.

Neste artigo vou mostrar como pode ser fácil e rápido construir uma solução usando MVC com PHP, neste caso vou usar o framework CodeIgniter.

Por que não Java?

Porque dependendo do sistema seria só adicionar mais complexidade
e custo. Desenvolver um sistema em Java é mais caro, isso não significa
que devemos fazer todos os sistemas em PHP, mas sempre temos que
balancear e a escolha da tecnologia tem sempre que levar a
complexidade do sistema em conta.

Code Igniter

Com esse framework em PHP você verá como que é fácil e simples de
desenvolver um sistema MVC de qualidade, com pouca configuração. Vou
mostrar um exemplo simples, mas será o suficiente para que você veja as facilidades e a qualidade da solução.

Requisitos

  • PHP 5.2
  • Apache 2.2
  • Mysql 5
  • Code Igniter 1.7.1

Não
entrarei nos detalhes de como instalar e configurar o PHP no Apache com
suporte a Mysql. Para instalar o Code Igniter basta extrair o framework
dentro da sua pasta onde você está listando as páginas no Apache.

Vamos mexer na pasta application que fica no caminho CodeIgniter_1.7.1\system\application. Primeiro criarei o Controller. Para criar um model basta ir na pasta models e criar uma página PHP. Confira o código abaixo:

test_model.php

<?php



class Test_model extends Model {



var $id = '';

var $nome = '';

var $endereco = '';



function Test_model(){

parent::Model();

}



function get_last_ten()

{

$query = $this->db->get('pessoa', 10);

return $query->result();

}



}



?>

Existem algumas formas de nomear uma classe model. Essa classe é
responsável pela regras de negócio e acesso ao banco de dados. Repare
que o nome da classe é igual ao nome do arquivo (test_model.php) só que
com a primeira letra em maiúscula.

Os atributos com “var #8221; são referentes aos atributos que existem
no banco de dados, neste exemplo existe o método get_last_ten que
retorna os últimos registros da tabela pessoa do banco de dados.

Criei um banco de dados no mysql com uma tabelinha. Segue o script do banco:

-- phpMyAdmin SQL Dump
-- version 3.2.0
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 04, 2009 at 07:54 PM
-- Server version: 5.0.67
-- PHP Version: 5.2.10

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `test`
--

-- --------------------------------------------------------

--
-- Table structure for table `pessoa`
--

CREATE TABLE IF NOT EXISTS `pessoa` (
`id` int(11) NOT NULL auto_increment,
`nome` varchar(30) NOT NULL,
`endereco` varchar(150) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `pessoa`
--

INSERT INTO `pessoa` (`id`, `nome`, `endereco`) VALUES
(2, 'Diego', 'GTI Centro'),
(3, 'Bruna', 'Centro Viamao');

Agora que temos o model e o banco vamos ao Controller, que controla tudo. Para isso basta criar outra página PHP no diretório CodeIgniter_1.7.1\system\application na parte de controllers.

Confira o código do controller abaixo:

test.php

<?php



class Test extends Controller {



function Test() {

parent::Controller();

}



function index(){



$data = array(

'nomeApp' => 'CodeIgnitorAppTest',

'developer' => 'Diego Pacheco'

);



$this->load->view('test',$data);

}



function listar(){



$data = array(

'nomeApp' => 'CodeIgnitorAppTest',

'developer' => 'Diego Pacheco'

);



$this->load->model('Test_model','myModel');

$data['query'] = $this->myModel->get_last_ten();

$this->load->view('test', $data);

}

}



?>

Algumas explicações, o método index é executado por padrão, cada
método desta classe poderá ser acessível quando você acessa pelo
browser

http://localhost/CodeIgniter_1.7.1/index.php/nomeDoController/nomeDoMetodo/parametros

Logo, digitando http://localhost/CodeIgniter_1.7.1/index.php/test
você entra na aplicação acessando o método padrão chamado index. No
método index estou criando uma variável chama de data, que é um array, e
dentro desse array estou passando dois parâmetros. Também estou
mandando carregar a view chamada de test.

Vamos ao código da View… Confira o código abaixo:

test.php

<html>
<head>
<title>Primeira View com CodeIgniter</title>
</head>
<body>

<h1>View gerada pelo CodeIgniter!</h1><p>

<b><?=$nomeApp;?></b> Desenvolvida por: <b><?=$developer;?></b>




<?php if(isset($query)) { ?>

<h3>Lista de Pessoas</h3>
<ul>

<?php foreach($query as $item):?>
<li> <?php echo $item->id;?> | <?php echo $item->nome;?> </li>
<?php endforeach; }else{ echo "<a href="'test/listar'">Listar Pessoas</a>"; } ?>

</ul>




Página renderizada em {elapsed_time} segundos</p>

</body>
</html>

A página deve estar dentro de CodeIgniter_1.7.1\system\application views.
Como pode ver é uma página html com blocos de código PHP. Se o usuário
clicar em listar o framework, vai chamar o controller no método listar,
que chamará o model pegando os registros da tabela pessoa e voltando
ao controler que repassa isso à view pela variável $query.

Para que toda essa aplicação funcione, você deve configurar o acesso
ao banco de dados e carregar as bibliotecas. Para isso, entre na pasta
config e edite o arquivo autoload.php e procure pela linha
$autoload[‘libraries’] = array(); a substitua por:
$autoload[‘libraries’] = array(‘database’); assim estamos carregando o
módulo de banco de dados.

Agora só falta configurar o acesso ao banco. Abra o arquivo
database.php também na pasta config, neste caso, como é um exemplo, estou
com a instalação default sem senha do root, mas isso não é aconselhável
para sua aplicação.

$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "test";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

E, pronto, agora temos uma mini aplicação MVC com o CodeIgniter. O
bom é que isso pode ser feito em menos de 5 minutos e com uma excelente
qualidade. Estou desenvolvendo uma aplicação com esse framework e mais
para frente mostro outras facilidades.

Abraços.