Framework desenvolvido em PHP "puro" prezando a facilidade de trabalhar com a programação orientada a objetos (POO) da versão 8.2.1 do PHP. Esse framework é constituido na arquitetura Model View Controller (MVC) que promove a facil modularidade, escalabilidade e manutenção de sistemas web.
#framework #php #mvc
composer install
php cli -d set
php cli -d load
Principais duvidas sobre o framework:
- Como definir rotas
- Comandos do terminal
- Como utilizar Requisições POST ou GET
- Como montar um Controller
- Como montar um Model
- Como renderizar uma View
- Como declarar variáveis no documento html
- Como inserir e buscar dados no através do controller
- Como criar tabelas no banco de dados
- Configurar middlewares e outras coisas
O esquema do seu banco de dados deve ficar na pasta database/schema
, onde todos os arquivos de tabelas devem estar separados na ordem de criação ASC.
Os métodos up e down são definidos para interação aos comandos do terminal, ou seja, método up serve para subir essa interação ao banco, enquanto o método down para dropar essa interação ao banco. Para definir uma nova tabela deve seguir a padronização abaixo do método up, onde para setar novas colunas a tabela é preciso apenas atribuir uma nova variável $table chamando um método do tipo de dado desejado.
Exemplo método up:
public function up(): void
{
(new Database)->create('nomeDaTabela', function(Blueprint $table) {
$table->id();
$table->varchar('nomeDaColuna', 100)->notNull();
});
}
Exemplo método down:
public function down(): void
{
(new Database)->dropIfExists('nomeDaTabela');
}
Os arquivos de insersão dos dados devem ficar na pasta database/information
, onde todos os arquivos de tabelas devem estar separados na ordem de criação ASC.
Assim como na criação das tabelas, também é preciso definir os métodos up e down.
Exemplo método up:
public function up(): void
{
(new Database('nomeDaTabela'))->insert([
'nomeDaColuna' => 'valor a ser inserido'
]);
}
Exemplo método down:
public function down(): void
{
(new Database('nomeDaTabela'))->delete('id = 1 ');
}
.
Base | Comando | Argumento | Função |
---|---|---|---|
php cli | --db | set | Carrega as tabelas database/schema no banco de dados. |
php cli | --db | drop | Dropa as tabelas database/schema no banco de dados. |
php cli | --db | reset | Recarrega as tabelas database/schema no banco de dados. |
php cli | --db | load | Insere as informações database/information para o banco de dados. |
php cli | --db | fresh | Remove as informações database/information no banco de dados. |
Base | Comando | Argumento | Função |
---|---|---|---|
php cli | --build | controller | Cria um novo controlador na pasta app/Controller . |
php cli | --build | model | Cria um novo modelo na pasta app/Model/Entity . |
php cli | --build | table | Cria uma nova tabela na pasta database/schema . |
Utilitário: para facilitar se você colocar o argumento:diretorio
será criado um novo arquivo já renomeado.
.
As rotas do framework ficam na pasta routes
da aplicação.
- Rotas permitidas: GET, POST, PUT, DELETE e OPTIONS.
Exemplo rota comum GET:
$obRouter->get('/url/exemplo', [
function($request) {
return new Response(200, Pages\HomeController::get($request));
}
]);
Exemplo rota dinamica PUT:
$obRouter->put('/url/exemplo/{id}', [
function($request, $id) {
return new Response(200, Pages\HomeController::edit($request, $id));
}
]);
Exemplo rota com middleware POST:
$obRouter->post('/url/exemplo', [
'middlewares' => [
'basic-auth'
],
function($request) {
return new Response(200, Pages\HomeController::set($request));
}
]);
.
As requisições tem por padrão alguns métodos que podem ser acessados pelo controller:
- getPostVars - retorna todas as variáveis POST enviadas pela requisição
- getQueryParams - retorna todas as variáveis GET enviadas pela requisição
- getUser - retorna uma instância de usuário autenticado no site
- setUser - seta uma instância de usuário
- getHeaders - retorna os headers da requisição
- getUri - retorna a URI da requisição
- getHttpMethod - retorna o método HTTP da requisição
- getRouter - retorna a instância de Router
Como acessar esses métodos?
Exemplo do getPostVars:
- Através do parametro request passado para o controller é possivel acessar qualquer um dos métodos acima.
public function metodoExemplo(Request $request): void
{
$request->getPostVars();
}
.
Os modelos devem ficar dentro da pasta app/Model/Entity
.
Toda model tem 4 métodos por padrão:
- create - cadastra os valores no banco
- update - atualiza os valores no banco
- delete - deleta os valores no banco
- getNomeDaClasse - busca os valores no banco
Declaracação de uma classe model: Toda model deve ser gerada para comportar uma tabela em específico.
- Por exemplo se eu tenho uma tabela: "post" com as colunas: "id" (identificador da tabela, int unsigned) "title" (titulo, char 20) e "content" (conteúdo, texto). Deve ser gerado uma model nesse formato:
Exemplo de Classe:
class Post
{
public int $id; // coluna id associada no banco
public string $title; // coluna title associada no banco
public string $content; // coluna content associada no banco
public function create(): bool
{
$this->id = (new Database('post'))->insert([
'title' => $this->title, // referenciando nome da coluna com o valor
'content' => $this->content
]);
return true;
}
}
Exemplo método CREATE:
public function create(): bool
{
$this->id = (new Database('nomeDaTabela'))->insert([
'nomeDaColuna' => $this->atributoDaClasse
]);
return true;
}
Exemplo método UPDATE:
public function update(): bool
{
return (new Database('nomeDaTabela'))->update('nomeDaColuna = '.$this->atributoDaClasse, [
'nomeDaColuna' => $this->atributoDaClasse
]);
}
Exemplo método DELETE:
public function delete(): bool
{
return (new Database('nomeDaTabela'))->securityDelete('nomeDaColuna = '.$this->atributoDaClasse);
}
Exemplo método GET:
public static function getTableName(
string $where = null,
string $order = null,
string $limit = null,
string $fields = '*'
): PDOStatement
{
return (new Database('nomeDaTabela'))->select($where, $order, $limit, $fields);
}
.
A view serve para renderizar variáveis decladas no html a serem substituidas por um conteúdo vindo do banco de dados.
- Para se declarar uma variável no conteúdo html deve seguir este modelo de declaração: {{nomeDaVariavel}}
Exemplo renderizando conteúdo da View:
public static function getPage(): string
{
// diretorio da pasta: resources/view
return View::render('pasta/exemploArquivoHtml', [
'nomeDaVariavel' => $conteudoAlterado
]);
}
.
Os controllers devem ficar dentro da pasta app/Controller
.
Todo controller tem 5 métodos por padrão:
- get - retorna um valor padrão do controller
- fetch - busca um valor específico do controller por algum ID
- set - cadastra valores no controller
- edit - edita valores no controller
- delete - deleta valores no controller
Exemplo método get:
public static function get(): array
{
$itens = [];
$results = EntityExemplo::getExemplos(); // model Exemplo
while($obExemplo = $results->fetchObject(EntityExemplo::class)) {
$itens[] = [
'nomeDaColuna' => $obExemplo->atributoDaClasse
];
}
return $itens;
}
Exemplo método post:
public static function set(Request $request): bool
{
$vars = $request->getPostVars();
$obExemplo = new EntityExemplo;
$obExemplo->atributoDaClasse = $vars['valorPost'];
$obExemplo->create();
return true;
}
Exemplo método delete:
public static function delete(Request $request, int $id): bool
{
$vars = $request->getPostVars();
$obExemplo = EntityExemplo::getExemplos('nomeDaColuna = '.$id); // busca o valor pelo id
$obExemplo->delete();
return true;
}
O arquivo de configuração do framework fica na pasta includes/app.php
da aplicação.
No arquivo app.php é configurado:
- Autoload das classes
- Load das Variáveis de ambiente (arquivo .env)
- Configuração do banco de dados
- Auto iniciação do banco de dados
- Define a constante de URL
- Define as variáveis constantes da View
- Define o map dos middlewares das rotas
- Seta os middlewares globais (padrão) de todas as rotas.