Criando uma Aplicação CRUD com PHP, MySQL e Lithe

Lithe - Oct 15 - - Dev Community

Este guia passo a passo irá te ensinar a construir uma aplicação CRUD utilizando PHP, MySQL e o framework Lithe. Abordaremos desde a configuração do banco de dados até a implementação de controladores para gerenciar operações CRUD.


Configuração do Ambiente

Antes de iniciar, assegure-se de ter o Composer instalado em sua máquina. O Composer é uma ferramenta essencial para gerenciar dependências em projetos PHP. Caso não tenha o Composer, você pode baixá-lo e instalá-lo a partir do site oficial do Composer.

Criando um Novo Projeto Lithe

Para criar um novo projeto com o framework Lithe, abra o terminal e execute o seguinte comando:

composer create-project lithephp/lithephp crud-app
Enter fullscreen mode Exit fullscreen mode

Isso criará um diretório chamado crud-app, onde todos os arquivos do projeto Lithe serão instalados. Após a instalação, navegue para o diretório do projeto:

cd crud-app
Enter fullscreen mode Exit fullscreen mode

Configurando o Banco de Dados

Agora, você precisa configurar a conexão com o banco de dados. Localize o arquivo .env na raiz do projeto. Este arquivo armazena as variáveis de ambiente que o Lithe usará durante a execução.

No arquivo .env, defina suas variáveis de conexão ao banco de dados conforme o exemplo abaixo:

DB_CONNECTION_METHOD=mysqli
DB_CONNECTION=mysql
DB_HOST=localhost
DB_NAME=lithe
DB_USERNAME=root
DB_PASSWORD=
DB_SHOULD_INITIATE=true
Enter fullscreen mode Exit fullscreen mode

Detalhes das Variáveis

  • DB_CONNECTION_METHOD: Método de conexão (neste caso, mysqli).
  • DB_CONNECTION: Tipo de banco de dados (por exemplo, mysql).
  • DB_HOST: Endereço do servidor de banco de dados (normalmente localhost para desenvolvimento local).
  • DB_NAME: Nome do banco de dados que será utilizado (por exemplo, lithe).
  • DB_USERNAME: Nome de usuário para acessar o banco de dados (padrão root para muitas configurações locais).
  • DB_PASSWORD: Senha do usuário do banco de dados (deixe em branco se não houver).
  • DB_SHOULD_INITIATE: Define se o banco de dados deve ser iniciado automaticamente ao iniciar a aplicação.

Após configurar o arquivo .env, você estará pronto para prosseguir com a criação da aplicação CRUD.

Com essas variáveis, o Lithe se conecta automaticamente ao banco de dados. Isso é feito pelo arquivo de configuração em src/database/config/database.php, que contém o seguinte método:

use Lithe\Database\Manager as DB;

return DB::initialize();
Enter fullscreen mode Exit fullscreen mode

Esse método retorna a conexão do banco de dados.


Criando Migrações

Após configurar o banco de dados, o próximo passo é criar a estrutura do banco de dados. Para isso, utilizamos o comando make:migration do Lithe. Execute o seguinte comando para criar uma migração:

php line make:migration CreateUsersTable
Enter fullscreen mode Exit fullscreen mode

Isso criará um arquivo de migração dentro do diretório src/database/migrations/, com um nome no formato YYYY_MM_DD_HHMMSS_CreateUsersTable.php.

A migração criada terá a seguinte estrutura:

return new class
{
    /**
     * Executa as migrações.
     *
     * @param mysqli $db
     * @return void
     */
    public function up(mysqli $db): void
    {
        $query = "
            CREATE TABLE IF NOT EXISTS users (
                id INT(11) AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(255) NOT NULL,
                email VARCHAR(255) UNIQUE NOT NULL,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
            )
        ";
        $db->query($query);
    }

    /**
     * Reverte as migrações.
     *
     * @param mysqli $db
     * @return void
     */
    public function down(mysqli $db): void
    {
        $query = "DROP TABLE IF EXISTS users";
        $db->query($query);
    }
};
Enter fullscreen mode Exit fullscreen mode

Após definir a estrutura da migração, execute o comando a seguir para aplicar as migrações e criar a tabela no banco de dados:

php line migrate
Enter fullscreen mode Exit fullscreen mode

Criando um Modelo

Para gerar um modelo que interaja com a tabela users, execute o seguinte comando:

php line make:model User
Enter fullscreen mode Exit fullscreen mode

Isso criará um arquivo em src/models, que servirá como base para manipular os dados do usuário. O modelo gerado se parecerá com isso:

namespace App\Models;

use Lithe\Database\Manager as DB;

class User
{
    // Aqui vai a lógica do modelo
}
Enter fullscreen mode Exit fullscreen mode

Métodos CRUD no Modelo

Adicione métodos estáticos para realizar operações CRUD usando mysqli.

Create (Criar)

Para inserir um novo usuário, adicione este método:

public static function create(array $data): bool
{
    $stmt = DB::connection()->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
    $stmt->bind_param('ss', $data['name'], $data['email']);
    return $stmt->execute();
}
Enter fullscreen mode Exit fullscreen mode

Read (Ler)

Para buscar usuários, implemente os métodos a seguir:

public static function all(): array
{
    return DB::connection()->query("SELECT * FROM users")->fetch_all(MYSQLI_ASSOC);
}

public static function find(int $id): ?array
{
    $stmt = DB::connection()->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->bind_param('i', $id);
    $stmt->execute();
    return $stmt->get_result()->fetch_assoc() ?: null;
}
Enter fullscreen mode Exit fullscreen mode

Update (Atualizar)

Para atualizar um usuário existente:

public static function update(int $id, array $data): bool
{
    $stmt = DB::connection()->prepare("UPDATE users SET name = ?, email = ? WHERE id = ?");
    $stmt->bind_param('ssi', $data['name'], $data['email'], $id);
    return $stmt->execute();
}
Enter fullscreen mode Exit fullscreen mode

Delete (Excluir)

E para excluir um usuário:

public static function delete(int $id): bool
{
    $stmt = DB::connection()->prepare("DELETE FROM users WHERE id = ?");
    $stmt->bind_param('i', $id);
    return $stmt->execute();
}
Enter fullscreen mode Exit fullscreen mode

Controladores Básicos

Para gerar rapidamente um novo controlador, execute o comando line make:controller. Todos os controladores gerados são armazenados no diretório src/http/controllers:

php line make:controller UserController
Enter fullscreen mode Exit fullscreen mode

Um controlador pode ter qualquer número de métodos públicos que responderão às requisições HTTP. Veja um exemplo de implementação básica para a tabela users:

namespace App\Http\Controllers;

use App\Models\User;
use Lithe\Http\Request;
use Lithe\Http\Response;

class UserController
{
    /**
     * Mostra o perfil de um usuário específico.
     */
    public function show(Request $req, Response $res)
    {
        $id = $req->param('id');

        return $res->view('user.profile', [
            'user' => User::find($id)
        ]);
    }

    /**
     * Cria um novo usuário.
     */
    public function store(Request $req, Response $res)
    {
        $data = (array) $req->body(); // Obtém todos os dados do pedido
        User::create($data);

        return $res->redirect('/users'); // Redireciona para a lista de usuários
    }

    /**
     * Atualiza um usuário existente.
     */
    public function update(Request $req, Response $res)
    {
        $id = $req->param('id');
        $data = (array) $req->body(); // Obtém todos os dados do pedido
        User::update($id, $data);

        return $res->redirect('/users'); // Redireciona para a lista de usuários
    }

    /**
     * Exclui um usuário.
     */
    public function delete(Request $req, Response $res)
    {
        $id = $req->param('id');
        User::delete($id);

        return $res->redirect('/users'); // Redireciona para a lista de usuários
    }
}
Enter fullscreen mode Exit fullscreen mode

Adicionando Visualizações

Para exibir as informações dos usuários, crie arquivos de visualização no diretório src/views. Um exemplo de arquivo pode ser user/profile.php, onde você irá construir a interface de exibição dos dados do usuário.


Iniciando a Aplicação

Para começar a desenvolver com o Lithe, você precisa criar uma nova instância da classe Lithe\App no arquivo src/App.php e definir as rotas.

use App\Http\Controllers\UserController;

$app = new \Lithe\App;

$app->get('/users/:id', [UserController::class, 'show']);
$app->post('/users', [UserController::class, 'store']);
$app->put('/users/:id', [UserController::class, 'update']);
$app->delete('/users/:id', [UserController::class, 'delete']);
Enter fullscreen mode Exit fullscreen mode

Rodando a Aplicação

Após definir as rotas, é fundamental chamar o método listen() para iniciar o servidor. Você pode fazer isso no mesmo arquivo src/App.php:

$app->listen();
Enter fullscreen mode Exit fullscreen mode

E para rodar a aplicação, utilize o comando:

php line serve
Enter fullscreen mode Exit fullscreen mode

Isso inicializa um servidor local que você pode acessar em http://localhost:8000.

Agora que sua aplicação CRUD está configurada e em execução, você poderá acessar as rotas de usuários diretamente no seu navegador. Para visualizar a lista de usuários ou interagir com as funções que você implementou, basta acessar:

http://localhost:8000/users
Enter fullscreen mode Exit fullscreen mode

Essa rota permitirá que você visualize todos os usuários cadastrados e realize operações como criar, atualizar ou excluir registros conforme as funcionalidades que você implementou nos controladores.


Conclusão

Com esses passos, você já possui uma aplicação CRUD funcional usando PHP, MySQL e o framework Lithe. Agora, você pode expandir essa base para adicionar mais recursos e funcionalidades conforme sua necessidade.

Para mais informações sobre como utilizar o Lithe, consulte a documentação oficial do Lithe. A documentação abrange desde a configuração inicial até recursos avançados, ajudando você a aproveitar ao máximo o potencial do framework.

Divirta-se programando!

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .