mssalvo / banquet
Un framework development Tool leggero e veloce per lo sviluppo di Applicazioni Web e API REST in PHP
Requires
- php: >=8.0
README
Banquet
Banquet MVC Tool PHP + code generator. Da tabella DB a API funzionante in pochi secondi.
Accelera lo sviluppo generando automaticamente il layer applicativo (Entity, DAO, Model, Service, API e Route), lasciando al developer la libertà di costruire il resto come preferisce
MVC · DI Container · Routing · Generatore automatico · API REST
Installazione
composer create-project mssalvo/banquet my-app
cd my-app
php -S localhost:8000
Inizio rapido
# 1. Avvia il server php -S localhost:8000 # 2. Genera Entity, DAO, Model, Service, API e Route dalla tabella "corsi" php banquet make:map corsi full-action # 3. Aggiorna autoload composer dump-autoload # 4. Visita # http://localhost:8000/corsi ← Lista corsi (HTML) # http://localhost:8000/api/corsi ← Lista corsi (JSON)
Hai già:
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /corsi |
Lista HTML |
| GET | /api/corsi |
Lista JSON |
| GET | /api/corsi/{id} |
Singolo record |
| POST | /api/corsi |
Inserimento |
| PUT | /api/corsi |
Modifica |
| DELETE | /api/corsi/{id} |
Eliminazione |
👉 Guida rapida 👉 Documentazione
API REST con JWT
# Ottieni token curl -X POST http://localhost:8000/api/login \ -H "Content-Type: application/json" \ -d '{"username":"banquet","password":"banquet"}' # Chiamata protetta curl -X POST http://localhost:8000/api/corsi \ -H "Authorization: Bearer <TOKEN>" \ -H "Content-Type: application/json" \ -d '{"nome":"Corso base"}'
Per API pubbliche, elimina $this->validateAuthToken(); dai metodi che vuoi rendere accessibili.
Comandi
| Comando | Cosa genera |
|---|---|
php banquet make:map all |
Entity, DAO, Model, Service per tutte le tabelle |
php banquet make:map corsi |
Idem per una tabella specifica |
php banquet make:map corsi full-action |
Come sopra + Action, View, Route, API REST |
php banquet make:action clienti |
Action + View + Route |
php banquet make:api corsi |
API REST + Route |
php banquet make:api corsi --with-swagger |
API REST + Route + OpenAPI |
php banquet make:action myaction --action-service=User |
Action con service diverso |
OpenAPI / Swagger
Genera annotation OpenAPI su Entity e classi REST, ed esporta il file openapi.yaml per visualizzare la documentazione con Swagger UI.
# 1. Installa la libreria per le annotation composer require zircote/swagger-php # 2. Genera Entity e API con annotation OpenAPI php banquet make:api corsi --with-swagger # 3. Esporta il file openapi.yaml ./vendor/bin/openapi app -o openapi.yaml
Il file OpenApiConfig.php (con le info globali: server, security, tag) viene creato automaticamente una sola volta nella directory app/src/Actions/Api/.
Routing
Le route vengono dichiarate tramite l'attributo #[Route] direttamente sui metodi delle Action classi:
use Banquet\Ms\Core\Attribute\Route; class Corsi extends SenderAction { #[Route('/corsi', 'GET')] public function send() { // ... } } class CorsiRest extends SenderAction { #[Route('/api/corsi', 'GET')] public function getAll(): void { } #[Route('/api/corsi/{id}', 'GET')] public function getById($id = null): void { } #[Route('/api/corsi', 'POST')] public function getInsert(): void { } #[Route('/api/corsi/{id}', 'DELETE')] public function getDelete($id = null): void { } }
Pattern supportati: {id}, {id:\d+}, {slug}-{id}.
I parametri si leggono con $this->route('id').
Niente più file web.php da gestire: lo scanner riflessivo trova automaticamente tutte le classi Action nella directory app/src/Actions/.
DI Container
Il container risolve le dipendenze automaticamente via Reflection:
class Articoli extends SenderAction { public function __construct( ArticoliService $service, // Risolto automaticamente Logger $log ) { } }
Template Composite
public function send() { $this->setTemplateName("pages/home"); $this->setTemplateChildren([ \Banquet\Actions\Header\Header::class, \Banquet\Actions\Menu\Menu::class, \Banquet\Actions\Footer\Footer::class ]); return $this->getTemplate("default"); }
<body> <?= $Header ?? '' ?> <?= $Menu ?? '' ?> <main><?= $default ?? '' ?></main> <?= $Footer ?? '' ?> </body>
Database supportati
| Driver | DB_DRIVER |
|---|---|
| MySQL | mysql |
| PostgreSQL | pgsql |
| SQLite | sqlite |
| SQL Server | sqlsrv |
Struttura
banquet/
├── index.php # Front controller
├── bin/
│ └── generate # Generatore automatico
├── app/
│ ├── src/
│ │ ├── Core/ # Nucleo framework
│ │ ├── Actions/ # Controller
│ │ ├── Model/ # Model layer
│ │ ├── Dao/ # Data Access Object
│ │ ├── Service/ # Business logic
│ │ ├── Entity/ # Entity (una per tabella)
│ │ └── view/ # Template
│ ├── brand/
│ └── setting/
└── vendor/
Requisiti
- PHP >= 8.0
- Composer
- PDO extension per il driver scelto
Built with PHP for simplicity and productivity.
