Aplicação do MVC em PHP
Vamos dar uma olhada na aplicação conjunta de tudo o que foi estudado. Suponha, por exemplo, que nós tenhamos alguns artigos/páginas no nosso site. Nós queremos mostrar um único artigo ou mostrar todos os artigos. Vamos ver como fazer isso no nosso framework.
Tabela no BD
Para começar, vamos criar uma tabela pages
no banco de dados. Vamos adicionar as colunas id,
title e text. Vamos preencher esta
tabela com alguns dados
via PhpMyAdmin.
Modelo
Vamos criar um modelo com um método para obter um único registro e um método para obter todos os registros:
<?php
namespace Project\Models;
use \Core\Model;
class Page extends Model
{
public function getById($id)
{
return $this->findOne("SELECT * FROM pages WHERE id=$id");
}
public function getAll()
{
return $this->findMany("SELECT id, title FROM pages");
}
}
?>
Roteamento
Vamos criar o roteamento correspondente:
<?php
use \Core\Route;
return [
new Route('/page/:id', 'page', 'one'),
new Route('/pages/', 'page', 'all'),
];
?>
Controlador
Vamos criar o controlador:
<?php
namespace Project\Controllers;
use \Core\Controller;
use \Project\Models\Page;
class PageController extends Controller
{
public function one($params)
{
$page = (new Page) -> getById($params['id']);
$this->title = $page['title'];
return $this->render('page/one', [
'text' => $page['text'],
'h1' => $this->title
]);
}
public function all()
{
$this->title = 'Lista de todas as páginas';
$pages = (new Page) -> getAll();
return $this->render('page/all', [
'pages' => $pages,
'h1' => $this->title
]);
}
}
?>
Views
Vamos criar a view para o método one:
<h1><?= $h1; ?></h1>
<div id="content">
<?= $text; ?>
</div>
Vamos criar a view para o método all:
<h1><?= $h1; ?></h1>
<div id="content">
<table>
<tr>
<th>id</th>
<th>title</th>
<th>link</th>
</tr>
<?php foreach ($pages as $page): ?>
<tr>
<td><?= $page['id']; ?></td>
<td><?= $page['title']; ?></td>
<td><a href="/page/<?= $page['id']; ?>/">link para a página</td>
</tr>
<?php endforeach; ?>
</table>
</div>
Tarefas Práticas
Suponha que você tenha produtos no seu banco de dados.
Cada produto contém um nome, um preço,
uma quantidade e uma descrição. Implemente a exibição de um único
produto por id e de todos os produtos de forma semelhante
ao que foi feito na teoria.