PHP Classes

PHP CRUD MVC: Develop applications that provide CRUD interfaces

Recommend this page to a friend!
  Info   View files Example   Screenshots Screenshots   View files View files (35)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog (2)    
Last Updated Ratings Unique User Downloads Download Rankings
2023-10-20 (2 months ago) RSS 2.0 feedNot yet rated by the usersTotal: 148 This week: 2All time: 9,086 This week: 45Up
Version License PHP version Categories
phpcrudmvc 5.1.1GNU General Publi...8.2PHP 5, Databases, Code Generation, De..., P...
Description 

Author

This package provides a framework to develop applications that provide CRUD interfaces.

After reading the connection parameters from a configuration script, it provides classes that can connect with several types of SQL databases using PDO. Currently, it supports MySQL, SQLite, Microsoft SQL Server, and PostgreSQL.

It also provides a class that can execute SQL queries to perform common operations to create, read, update, and delete operations on table records using given parameters.

The package also provides a class that can take model definitions to:

- Create database tables

- Generate code for controller classes, router classes, and test classes

- Generate JavaScript code to communicate with server-side

- Generate HTML pages and templates to generate CRUD forms

- Execute to create SQL stored procedures to execute common SQL queries on the database server side

In Portuguese:

MicroFramework é um pequeno e simplificado framework PHP, projetado para fornecer funcionalidades básicas e essenciais para o desenvolvimento de aplicações web.

A versão 5 está no Github.

Innovation Award
PHP Programming Innovation award winner
October 2023
Winner
CRUD is a common pattern used to implement software applications that store and retrieve data in a kind of database like, for instance, SQL-based databases.

Sometimes, this pattern is implemented with libraries that perform the common operations to create, read, update, and delete database records.

Another approach uses code generation to store and retrieve the records in the database records.

This package implements the code generation approach. It also uses stored procedures to execute SQL queries faster than INSERT, SELECT, UPDATE, and DELETE queries.

Manuel Lemos
Picture of Rodrigo Faustino
  Performance   Level  
Name: Rodrigo Faustino <contact>
Classes: 10 packages by
Country: Brazil Brazil
Innovation award
Innovation award
Nominee: 8x

Winner: 1x

Instructions

After downloading this package and placing it on the development server, execute the install.php to enter the MySQL access credential.

The database that will used can be created by this package.

Then, access migrate.php page where you enter the class name and names of the properties, and when confirming, everything will be generated.

After that, access the index.html page to see a simple system ready to use.

Example

<?php
require_once 'vendor/autoload.php';

use
App\Database\TableCreator;


header('Content-Type: application/json');

try {
    if (
$_SERVER['REQUEST_METHOD'] === 'POST') {
       
$data = $_POST;
      
        if (!isset(
$data['className'], $data['propertyCount'])) {
            throw new
Exception('Nome da classe é obrigatória e ao menos uma propriedade!');
        }
       
$className = ucfirst($data['className']);
       
$propertyCount = $data['propertyCount'];
       
$properties = [];
       
$useDateTime = false;
        for (
$i = 0; $i < $propertyCount; $i++) {
            if (!isset(
$data["propName{$i}"], $data["propType{$i}"])) {
                throw new
Exception("Nome e tipo da propriedade são obrigatórios {$i}!");
            }
           
$properties[] = [
               
'name' => $data["propName{$i}"],
               
'type' => $data["propType{$i}"],
            ];
            if (
$data["propType{$i}"] === 'datetime') {
               
$useDateTime = true;
            }
        }
       
$classTemplate = "<?php\n\nnamespace App\Model;\n\n";
        if (
$useDateTime) {
           
$classTemplate .= "use DateTime;\n\n";
        }
       
$classTemplate .="class $className {\n";
          
        foreach (
$properties as $property) {
           
$classTemplate .= " private {$property['type']} \${$property['name']};\n";
        }
        foreach (
$properties as $property) {
           
$camelCasePropName = ucfirst($property['name']);
           
$classTemplate .= "\n public function get$camelCasePropName() {\n";
           
$classTemplate .= " return \$this->{$property['name']};\n }\n";

           
$classTemplate .= "\n public function set$camelCasePropName({$property['type']} \${$property['name']}) {\n";
           
$classTemplate .= " \$this->{$property['name']} = \${$property['name']};\n";
           
$classTemplate .= " return \$this;\n }\n";
        }
       
$classTemplate .= "}\n";
       
$dir = "Backend/Model";
        if (!
is_dir($dir)) {
           
mkdir($dir, 0777, true);
        }
       
$dir2 = "Backend/Controller";
        if (!
is_dir($dir2)) {
           
mkdir($dir2, 0777, true);
        }
       
$dir3 = "Backend/Routes";
        if (!
is_dir($dir3)) {
           
mkdir($dir3, 0777, true);
        }
       
file_put_contents("$dir/$className.php", $classTemplate);

       
$make = new TableCreator();
        require_once
"$dir/$className.php";
       
       
$fullClassName = "App\\Model\\$className";
       
$classeMigrate = new $fullClassName();
       
       
$make->createController($classeMigrate);
       
$make->createTableFromModel($classeMigrate);
       
$make->createTests($classeMigrate);
       
$make->createRoute($classeMigrate);
       
$make->createJsClasses($className, $properties);
       
$make->createHtmlForm($className, $properties);
       
$make->createHtmlTemplate($className);
       
        echo
json_encode(['success' => true]);

       
    } else {
        throw new
Exception('Invalid request method!');
    }
} catch (
Exception $e) {
   
http_response_code(400);
    echo
json_encode(['success' => false, 'error' => $e->getMessage()]);
}


Details

PHPCrudMVC

Descrição

PHPCrudMVC 5.1.0 (Atualizado 20-10-2023 layout materializecss) é um pequeno e simplificado framework PHP, projetado para fornecer funcionalidades básicas e essenciais para o desenvolvimento de aplicações web. Ele oferece uma estrutura básica para operações CRUD (Create, Read, Update, Delete) e gerenciamento de conexões com banco de dados, permitindo que os desenvolvedores se concentrem na lógica de negócios específica de suas aplicações. Este MicroFramework visa trazer facilidades que um grande framework tem, porém indo direto ao ponto usando PHP puro com PSR-4 sem esconder como as coisas funcionam, este modelo é então idealizado para estudante de programação que queiram entender os fluxos de dados que envolve uma aplicação real. Com a estrutura MVC e uma capacidade de comunicação REST, onde o frontend é independente do backend, ambos trabalham separados e se comunicam no padrão API REST.

Instalação

Clone o repositório

git clone https://github.com/faustinopsy/PHPCrudMVC.git

Instale as dependências do Composer

composer install

Instalação e Configuração Inicial

O arquivo install.php na raiz do projeto facilita a configuração inicial do banco de dados e a criação de classes e tabelas correspondentes. Ao acessar este arquivo, será apresentado um formulário migrate.php solicitando as credenciais do banco de dados e, em seguida, criará o banco de dados conforme especificado, onde você fornece o nome da classe a ser criada e suas propriedades, em seguida abrirá os campos para colocar os nomes das propriedades e seus tipos, após confirmar será criado no diretório Model a classe, e no diretório Controller será criado as classe controller correspondente, e também será criado n diretório Routers o arquivo de rotas correspondente a classe controller. o migrate.php poderá ser chamado sempre que houver necessidade de criação de classes sem a necessidade de iniciar pelo install

Criação Automática de Classes e Tabelas

Após a configuração inicial do banco de dados, o install.php (lembre-se de não subir para produção nem o install.php nem o migrate.php) também facilita a criação de classes modelo e suas tabelas correspondentes no banco de dados. O usuário pode especificar o nome da classe e suas propriedades (nome e tipo) através de um formulário. Com base nessas informações, o seguinte é gerado automaticamente: - Classe Modelo: Uma classe PHP no diretório Backend/Model que representa um modelo de dados com propriedades e métodos getter e setter. - Controlador: Um controlador correspondente no diretório Backend/Controller que facilita as operações CRUD para o modelo. - Tabela de Banco de Dados: Uma tabela no banco de dados que corresponde ao modelo, com colunas que representam as propriedades da classe. - Procedures: Procedures SQL para operações básicas de CRUD relacionadas à tabela criada.

  • Frontend:será criado na raiz os htmls responsáveis chamar as requisições por meios dos arquivos javascipt correspondentes que são criados também.

Geração de Classes JavaScript e Formulários HTML

Foi descontinuado a criação de javascript e formulários html, mas na raiz encontra-se modelos para realizar uma cópia e reproduzir para as classes correspondentes, e ajustar o caminho para a rota especifica

Testes Automatizados

Os testes para as classes modelo e controladores também são gerados automaticamente, garantindo que as operações básicas de CRUD funcionem conforme esperado. Os testes são salvos no diretório backend/tests e podem ser executados usando PHPUnit para validar a lógica de negócios e operações de banco de dados. De certo que os métodos deveram ser construidos é gerado apenas a base para criar seus proprios testes

Uso

Após a configuração inicial e a criação das classes, controladores e tabelas, o MicroFramework está pronto para ser usado. Os desenvolvedores podem criar novas rotas, expandir os controladores existentes e adicionar novas lógicas de negócios conforme necessário, enquanto aproveitam as funcionalidades básicas de roteamento, banco de dados e CRUD fornecidas pelo MicroFramework.

Configure o banco de dados no arquivo config Execute os scripts de criação de tabela conforme necessário

Estrutura do Projeto

O projeto é estruturado de maneira clara e concisa, facilitando a compreensão e o desenvolvimento por parte dos desenvolvedores. A estrutura principal é composta por três classes principais: - Router: é a classe que é responsável por gerenciar as requisições do frontend mediante os verbos http e o recurso ex.: recurso='backend/usuario' e verbo GET ele irá executar a classe e método correspondente. - backend/Database/config: credenciais do banco de dados. - backend/Database/Connection: Gerencia a conexão com o banco de dados. - backend/Database/Crud: Fornece métodos genericos para realizar operações CRUD no banco de dados. - backend/Controller/UserController: Um exemplo de controlador que estende as funcionalidades da classe Crud, permitindo a manipulação de dados do usuário. - backend/Model/Usuarios: uma classe com propriedades estaticamente tipadas, este é um requisito para que se crie as tabelas do banco de dados de forma mapeada - backend/Database/TableCreate: é a classe responsável por criar as tabelas no banco de dados quando ela recebe a classe model correspondente e cria também os store procedure para a classe.


Connection

A classe Connection é responsável por estabelecer e gerenciar a conexão com o banco de dados. Ela utiliza PDO para garantir a compatibilidade com diversos sistemas de gerenciamento de banco de dados.

Crud

A classe Crud estende Connection e oferece métodos para realizar operações CRUD básicas no banco de dados. Ela utiliza reflexão para determinar os campos que devem ser utilizados nas operações de banco de dados, permitindo uma certa flexibilidade e reutilização de código.

UserController

UserController é uma classe exemplo que estende Crud, oferecendo funcionalidades específicas para manipular dados do usuário. Ela demonstra como as classes e métodos do MicroFramework podem ser estendidos e utilizados em casos de uso específicos.

Pré-requisitos

PHP >= 8.2
Composer
MySQL (ou outro SGBD compatível com PDO)

Testes

O MicroFramework agora vem com testes unitários, garantindo que as funcionalidades principais estejam funcionando conforme esperado e facilitando a identificação e correção de bugs durante o desenvolvimento. Os testes foram escritos utilizando PHPUnit e cobrem operações básicas de CRUD.

Executando os Testes

Para executar os testes, você precisa ter o PHPUnit instalado e o xdebug para gerar os relatórios coverage. um outro requisito é ter no php.ini a diretiva abaixo, e como verá a extensão xdebug no lugar indicado dentro do diretório extension do php:

[xdebug]
zend_extension ="C:/php/ext/php_xdebug.dll"

xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = Off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="C:/tmp"
xdebug.show_local_vars=0
xdebug.mode = coverage

Uma vez instalado, você pode executar os testes usando o seguinte comando no diretório raiz do projeto:

./vendor/bin/phpunit backend/tests --coverage-html coverage-report/

? Contribuindo Contribuições, issues e solicitações de feature são bem-vindas! Sinta-se à vontade para conferir a página de issues.

? Licença Este projeto está licenciado sob a licença MIT .

? Contato Rodrigo Faustino - @faustinopsy - rodrigohipnose@gmail.com


Screenshots  
  • class
Videos  
  • CRIANDO UM CRUD RAPIDAMENTE COM MEU PRÓPRIO FRAMEWORK
  • GERADOR DE CÓDIGO PHP MVC CRUD Generator
  Files folder image Files  
File Role Description
Files folder image.github (1 file)
Files folder imagebackend (2 files, 2 directories)
Files folder imagecss (5 files)
Files folder imagejs (4 files)
Accessible without login Plain text file .phpunit.result.cache Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file createClass.php Example Example script
Accessible without login Plain text file install.php Aux. Auxiliary script
Accessible without login Plain text file migrate.php Aux. Auxiliary script
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Accessible without login Plain text file phpunit.xml.bak Data Auxiliary data
Accessible without login Plain text file Readme.md Doc. Documentation

  Files folder image Files  /  .github  
File Role Description
  Accessible without login Plain text file FUNDING.yml Data Auxiliary data

  Files folder image Files  /  backend  
File Role Description
Files folder imageDatabase (3 files)
Files folder imagetests (11 files)
  Accessible without login Plain text file .htaccess Data Auxiliary data
  Accessible without login Plain text file index.php Example Example script

  Files folder image Files  /  backend  /  Database  
File Role Description
  Plain text file Connection.php Class Class source
  Plain text file Crud.php Class Class source
  Plain text file TableCreator.php Class Class source

  Files folder image Files  /  backend  /  tests  
File Role Description
  Plain text file AulaControllerTest.php Class Class source
  Plain text file AulaTest.php Class Class source
  Plain text file ConectTest.php Class Class source
  Plain text file EnderecoControllerTest.php Class Class source
  Plain text file EnderecoTest.php Class Class source
  Plain text file PessoaControllerTest.php Class Class source
  Plain text file PessoaTest.php Class Class source
  Plain text file RouterTest.php Class Class source
  Plain text file TableCreatorTest.php Class Class source
  Plain text file UsuariosControllerTest.php Class Class source
  Plain text file UsuariosTest.php Class Class source

  Files folder image Files  /  css  
File Role Description
  Accessible without login Plain text file materialize.css Data Auxiliary data
  Accessible without login Plain text file materialize.min.css Data Auxiliary data
  Accessible without login Plain text file stylecriador.css Data Auxiliary data
  Accessible without login Plain text file styles.css Data Auxiliary data
  Accessible without login Plain text file sweetalert2.min.css Data Auxiliary data

  Files folder image Files  /  js  
File Role Description
  Accessible without login Plain text file init.js Data Auxiliary data
  Accessible without login Plain text file jquery-2.1.1.min.js Data Auxiliary data
  Accessible without login Plain text file materialize.min.js Data Auxiliary data
  Accessible without login Plain text file sweetalert2.all.min.js Data Auxiliary data

 Version Control Unique User Downloads Download Rankings  
 97%
Total:148
This week:2
All time:9,086
This week:45Up