Projeto

CRUD: Estrutura de Gestão Organizacional - Posição

CRUD: Estrutura de Gestão Organizacional - Posição

Fabrício de Medeiros

CRUD (Create, Read, Update, Delete) para gerenciar as posições na Medeiros Corporation Inc., seguindo a mesma estrutura e práticas de sanitização. Aqui está o guia passo a passo para implementar isso:

Estrutura do Projeto

Estrutura de Arquivos:

library-system
├── src
│   ├── Controller
│   │   ├── PositionController.php
│   ├── Model
│   │   ├── Position.php
│   ├── View
│   │   ├── PositionView.php
│   ├── Service
│   │   ├── PositionService.php
├── public
│   └── index.php
├── config
│   └── database.php
├── vendor
└── composer.json

1. Modelo (Model)

src/Model/Position.php

<?php

namespace LibrarySystem\Model;

class Position {
    private $id_position;
    private $position;
    private $description;

    // Getters and Setters
    public function getIdPosition() {
        return $this->id_position;
    }

    public function setIdPosition($id) {
        $this->id_position = (int)$id; // Sanitização
    }

    public function getPosition() {
        return $this->position;
    }

    public function setPosition($position) {
        $this->position = htmlspecialchars(strip_tags($position)); // Sanitização
    }

    public function getDescription() {
        return $this->description;
    }

    public function setDescription($description) {
        $this->description = htmlspecialchars(strip_tags($description)); // Sanitização
    }
}

2. Visualização (View)

src/View/PositionView.php




3. Controlador (Controller)

src/Controller/PositionController.php

<?php

namespace LibrarySystem\Controller;

use LibrarySystem\Model\Position;
use LibrarySystem\Service\PositionService;

class PositionController {
    private $positionService;

    public function __construct($dbConnection) {
        $this->positionService = new PositionService($dbConnection);
    }

    public function create() {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $position = new Position();
            $position->setPosition($_POST['position']);
            $position->setDescription($_POST['description']);
            $this->positionService->createPosition($position);
            header('Location: /positions');
        }
    }

    public function read() {
        $positions = $this->positionService->getAllPositions();
        include '../src/View/PositionView.php';
    }

    public function update($id) {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            $position = new Position();
            $position->setIdPosition($id);
            $position->setPosition($_POST['position']);
            $position->setDescription($_POST['description']);
            $this->positionService->updatePosition($position);
            header('Location: /positions');
        } else {
            $position = $this->positionService->getPosition($id);
            include '../src/View/PositionView.php';
        }
    }

    public function delete($id) {
        $this->positionService->deletePosition($id);
        header('Location: /positions');
    }
}

4. Serviço (Service)

src/Service/PositionService.php

<?php

namespace LibrarySystem\Service;

use LibrarySystem\Model\Position;

class PositionService {
    private $db;

    public function __construct($dbConnection) {
        $this->db = $dbConnection;
    }

    public function createPosition(Position $position) {
        $stmt = $this->db->prepare("INSERT INTO dep_positions (position, description) VALUES (:position, :description)");
        $stmt->bindValue(':position', $position->getPosition());
        $stmt->bindValue(':description', $position->getDescription());
        return $stmt->execute();
    }

    public function getAllPositions() {
        $stmt = $this->db->query("SELECT * FROM dep_positions");
        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }

    public function getPosition($id) {
        $stmt = $this->db->prepare("SELECT * FROM dep_positions WHERE id_position = :id");
        $stmt->bindValue(':id', (int)$id);
        $stmt->execute();
        return $stmt->fetch(\PDO::FETCH_ASSOC);
    }

    public function updatePosition(Position $position) {
        $stmt = $this->db->prepare("UPDATE dep_positions SET position = :position, description = :description WHERE id_position = :id");
        $stmt->bindValue(':position', $position->getPosition());
        $stmt->bindValue(':description', $position->getDescription());
        $stmt->bindValue(':id', $position->getIdPosition());
        return $stmt->execute();
    }

    public function deletePosition($id) {
        $stmt = $this->db->prepare("DELETE FROM dep_positions WHERE id_position = :id");
        $stmt->bindValue(':id', (int)$id);
        return $stmt->execute();
    }
}

5. Configuração do Banco de Dados

Certifique-se de que sua conexão com o banco de dados está configurada corretamente em config/database.php.

6. Roteamento

Implemente o roteamento em public/index.php para chamar os métodos corretos do controlador de acordo com as requisições.

Considerações Finais

Este CRUD para gerenciamento de posições segue as melhores práticas de sanitização, encapsulamento e um design orientado a objetos. Adapte e expanda conforme necessário para atender às necessidades específicas da Medeiros Corporation Inc.

Editar Voltar