Estrutura básica para uso do microframework Slim usando padrão MVC.
Este repositório consiste em uma estrutura básica para o uso no desenvolvimento de aplicações usando o microframework Slim.
A estrutura dos diretórios estão separados da seguinte forma:
- public
- css
- fonts
- images
- js
- src
- app
- Controllers
- Helpers
- Middlewares
- Models
- Routes
- Views
- configs
- system
- Interfaces
No diretório public
são encontrados os arquivos de folha de estilo, fonts, imagens e javascrip.
No diretorio src
é onde estão os arquivos PHP.
app
está a estrutura MVC e outros arquivos comoHelpers
,Middlewares
eRoutes
.configs
aqui estão os arquivos de configurações do microframework Slim e configurações que possam ser usadas pelos sistemas desenvolvidos em cima dessa estrutura.system
arquivos que organizam a estrutura para o uso do MVC.
O padrão MVC [Model, View, Controller] consiste organizar os arquivos da aplicação em três funções.
Model
é onde se encontra a lógica da aplicação. Aqui é onde é feita a filtragem dos dados, busca dos dados no Banco, organização dos dados, em fim o CRUD.View
é onde estão os modelos/organização dos dados que serão mostrados para o usuário final.Controller
nesses arquivos é onde é recebido as requisições (request) dos usuários e o mesmo pega os dados doModel
e coloca em umaView
e responde (response) para o requisitante.
Os arquivos do model devem seguir a seguinte estrutura:
src/app/Models/Usuarios.php
<?php
namespace App\Models;
use System\Model;
use Psr\Http\Message\RequestInterface;
class Usuarios extends Model
{
public function __construct($container)
{
// Nome da tabela do banco de dados que será usado nesse model
$table = 'usuarios';
parent::__construct($container,$table);
}
public function index(RequestInterface $request)
{
// Definimos os dados que serão enviados para a página index
$this->title = "Título da página";
$this->content = "Conteúdo da página";
// Retornamos os dados para que o Controller
// possa repassa-los para a View
return $this->data;
}
}
As Views dessa estrutura usam o Twig.
src/app/Views/index.twig
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ title }}</h1>
<hr>
<p>{{ content }}</p>
</body>
</html>
Os arquivos de Controller devem seguir a seguinte estrutura:
src/app/Controllers/Home.php
<?php
namespace App\Controller;
use System\Controllers;
final class Home extends Controller
{
public function __construct($container)
{
parent::__construct($container, 'Home', 'home');
$this->template['index'] = 'index.twig';
}
}
O metodo index ja está implementado pela classe pai.