Skip to content

Esse é um framework em php criado para facilidar a criação de sistemas web.

License

Notifications You must be signed in to change notification settings

GustavoSachetto/Php-puro

Repository files navigation

Php-puro v1.1

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

Comandos iniciais:

composer install
php cli -d set
php cli -d load

Documentação:

Principais duvidas sobre o framework:

Banco de dados

Criação das tabelas

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');
}

Insersão dos dados

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 ');
}

.

Comandos do Terminal

Comandos do banco de dados:

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.

Comandos para criação de arquivos:

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.

.

Rotas

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));
    }
]);

.

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();
}

.

Model

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);
}

.

View

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
    ]);
}

.

Controller

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;
}

Configuração

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.

About

Esse é um framework em php criado para facilidar a criação de sistemas web.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published