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:
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.
Exemplo rota comum GET:
$obRouter->get('/url/exemplo', [
function($request) {
return new Response(200, PagesHomeController::get($request));
}
]);
Exemplo rota dinamica PUT:
$obRouter->put('/url/exemplo/{id}', [
function($request, $id) {
return new Response(200, PagesHomeController::edit($request, $id));
}
]);
Exemplo rota com middleware POST:
$obRouter->post('/url/exemplo', [
'middlewares' => [
'basic-auth'
],
function($request) {
return new Response(200, PagesHomeController::set($request));
}
]);
.
As requisições tem por padrão alguns métodos que podem ser acessados pelo controller:
Como acessar esses métodos?
Exemplo do getPostVars:
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:
Declaracação de uma classe model: Toda model deve ser gerada para comportar uma tabela em específico.
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);
}
.
Os middlewares são os intermediários das rotas e ficam na pasta app/Http/Middleware da aplicação, são configurados no arquivo include/app.php onde deve se especificar um nome único para cada middleware.
Todo middleware deve ter um método padrão:
Exemplo de middleware:
class MiddlewareExemplo
{
private function checkStatus(Request $request): void
{
$vars = $request->getPostVars();
if ($vars['status'] == 'error') {
throw new Exception("A página está com erro");
}
}
public function handle(Request $request, Closure $next): Response
{
$this->checkStatus($request); // se o status não estiver com erro carrega a aplicação
return $next($request);
}
}
Configurando middleware:
MiddlewareQueue::setMap([
'middleware-exemplo' => AppHttpMiddlewareMiddlewareExemplo::class
]);
.
A view serve para renderizar variáveis decladas no html a serem substituidas por um conteúdo vindo do banco de dados.
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:
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: