PHPackages                             brikocode/framework - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. brikocode/framework

ActiveLibrary[Framework](/categories/framework)

brikocode/framework
===================

Brikocode — framework PHP minimaliste à saveur ivoirienne

v0.4.0(1mo ago)010MITPHPPHP &gt;=8.1CI passing

Since Apr 30Pushed 1mo agoCompare

[ Source](https://github.com/devKonan/framework)[ Packagist](https://packagist.org/packages/brikocode/framework)[ Docs](https://github.com/devKonan/framework)[ RSS](/packages/brikocode-framework/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependenciesVersions (5)Used By (0)

Brikocode Framework
===================

[](#brikocode-framework)

> Framework PHP minimaliste à saveur ivoirienne. Zéro dépendance externe · PHP 8.1+ · Architecture propre

---

Table des matières
------------------

[](#table-des-matières)

1. [Installation](#installation)
2. [Architecture](#architecture)
3. [Configuration](#configuration)
4. [Routing](#routing)
5. [Request](#request)
6. [Response](#response)
7. [Middleware](#middleware)
8. [Base de données — database](#base-de-donn%C3%A9es--database)
9. [Offline-First](#offline-first)
10. [Mode Low Bandwidth](#mode-low-bandwidth)
11. [SMS — sms](#sms--sms)
12. [Logging](#logging)
13. [CLI — console](#cli--console)
14. [Helpers globaux](#helpers-globaux)
15. [Générateurs de code](#g%C3%A9n%C3%A9rateurs-de-code)
16. [Licence](#licence)

---

Installation
------------

[](#installation)

```
git clone https://github.com/brikocode/framework mon-projet
cd mon-projet
composer install
cp .env.example .env
```

Démarrer le serveur de développement :

```
php briko feu
# → http://localhost:8000
```

---

Architecture
------------

[](#architecture)

```
brikocode/
│
├── foundation/                     Noyau applicatif
│   ├── App.php               Bootstrap : charge .env, boot Logger, instancie Kernel
│   ├── Container.php         Conteneur d'injection de dépendances
│   ├── Env.php               Parseur .env natif
│   ├── Logger.php            Système de logs structurés (+ LogChannel)
│   └── helpers.php           Fonctions globales : env(), db(), sms(), logger(), base_path()
│
├── http/                    Couche HTTP
│   ├── Kernel.php            Reçoit la requête, dispatche, envoie la réponse
│   ├── Request.php           Abstraction de la requête HTTP
│   ├── Response.php          Envoi de réponse JSON/HTML avec gzip optionnel
│   └── Middleware/
│       ├── MiddlewareInterface.php
│       ├── Pipeline.php      Exécute la chaîne de middlewares
│       ├── Guard.php         Exemple de middleware d'authentification
│       ├── OfflineFirst.php  Cache GET + file d'attente writes hors ligne
│       ├── LowBandwidth.php  Gzip + sélection de champs + strip nulls
│       └── HttpLogger.php    Log automatique de chaque requête HTTP
│
├── routing/               Routeur  (itinéraire = chemin)
│   └── Router.php            Routes dynamiques, tous verbes HTTP, middleware par route
│
├── database/                  Base de données
│   ├── Connection.php        Connexion PDO singleton (MySQL, PostgreSQL, SQLite)
│   ├── QueryBuilder.php      Query Builder fluide
│   ├── DB.php                Facade statique
│   ├── OfflineQueue.php      File d'attente JSON pour requêtes hors ligne
│   └── ResponseCache.php     Cache fichier des réponses GET
│
├── sms/                   SMS
│   ├── SMS.php               Facade statique (envoi + OTP)
│   ├── SmsMessage.php        Constructeur de message fluide
│   ├── SmsResult.php         Objet résultat d'un envoi
│   ├── OtpManager.php        Génération/vérification OTP sans base de données
│   └── Drivers/
│       ├── SmsDriverInterface.php
│       ├── AbstractDriver.php    Client HTTP partagé (cURL / fgc fallback)
│       ├── AfricasTalkingDriver.php  Africa's Talking (recommandé Afrique)
│       ├── TwilioDriver.php          Twilio (international)
│       ├── HttpDriver.php            HTTP générique (Orange CI, MTN, Moov…)
│       └── LogDriver.php             Développement — SMS dans les logs
│
├── console/                   CLI
│   └── Console.php           Toutes les commandes briko
│
├── app/                  Ton application
│   ├── routes.php            Définition des routes
│   ├── controllers/          Tes controllers
│   └── models/               Tes models
│
├── storage/
│   ├── logs/                 Fichiers de log journaliers
│   ├── cache/                Cache des réponses GET
│   ├── queue/offline.json    File d'attente hors ligne
│   └── otp/                  Codes OTP temporaires
│
├── public/
│   └── index.php             Point d'entrée HTTP
├── briko                     Point d'entrée CLI
├── composer.json
└── .env.example

```

---

Configuration
-------------

[](#configuration)

Copie `.env.example` en `.env` et remplis les valeurs :

```
# Application
APP_NAME=Brikocode
APP_ENV=local          # local | production
APP_DEBUG=true
APP_URL=http://localhost:8000
APP_PORT=8000

# Logs
LOG_LEVEL=DEBUG        # DEBUG | INFO | WARNING | ERROR | CRITICAL
                       # En production : LOG_LEVEL=WARNING

# Base de données
DB_DRIVER=mysql        # mysql | pgsql | sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=brikocode
DB_USER=root
DB_PASS=

# SQLite
# DB_DRIVER=sqlite
# DB_PATH=database/db.sqlite

# SMS — driver actif
SMS_DRIVER=log         # log | africastalking | twilio | http
SMS_FROM=Brikocode
OTP_MESSAGE="Votre code de vérification : "

# Africa's Talking (africastalking.com)
AT_USERNAME=sandbox
AT_API_KEY=
AT_SANDBOX=true        # false en production

# Twilio
TWILIO_SID=
TWILIO_TOKEN=
TWILIO_FROM=

# HTTP générique (Orange CI, MTN, Moov, etc.)
SMS_HTTP_URL=
SMS_HTTP_FIELD_TO=to
SMS_HTTP_FIELD_MSG=message
SMS_HTTP_FIELD_FROM=from
SMS_HTTP_AUTH_FIELD=apikey
SMS_HTTP_AUTH_VALUE=
SMS_HTTP_SUCCESS_CODE=200
```

---

Routing
-------

[](#routing)

Les routes sont définies dans `app/routes.php`.

### Verbes HTTP

[](#verbes-http)

```
$router->get('/users',          [UserController::class, 'index']);
$router->post('/users',         [UserController::class, 'store']);
$router->put('/users/{id}',     [UserController::class, 'update']);
$router->patch('/users/{id}',   [UserController::class, 'patch']);
$router->delete('/users/{id}',  [UserController::class, 'destroy']);
```

### Routes dynamiques

[](#routes-dynamiques)

```
$router->get('/users/{id}',                          [UserController::class, 'show']);
$router->get('/posts/{slug}/comments/{commentId}',   [CommentController::class, 'show']);
```

### Closures

[](#closures)

```
$router->get('/ping', fn () => ['pong' => true]);
$router->get('/salut', fn () => 'Gbaka est en route 🚐');
```

### Middleware par route

[](#middleware-par-route)

```
use Briko\Http\Middleware\OfflineFirst;
use Briko\Http\Middleware\LowBandwidth;
use Briko\Http\Middleware\HttpLogger;

$router->get('/users',     [UserController::class, 'index'],  [HttpLogger::class, OfflineFirst::class]);
$router->get('/api/light', [ApiController::class, 'data'],    [LowBandwidth::class]);

// Plusieurs middlewares s'exécutent dans l'ordre du tableau
$router->post('/users',    [UserController::class, 'store'],  [HttpLogger::class, OfflineFirst::class]);
```

---

Request
-------

[](#request)

```
use Briko\Http\Request;

public function show(Request $request): array
{
    // Paramètre de route : /users/{id}
    $id = $request->param('id');

    // Valeur GET, POST, JSON body ou param — ordre unifié
    $name   = $request->input('name', 'defaut');
    $search = $request->input('q');

    // Accès direct
    $request->query;     // $_GET
    $request->post;      // $_POST
    $request->params;    // paramètres de route
    $request->files;     // $_FILES

    // Corps JSON brut
    $data = $request->body();    // array

    // Tout fusionné (query + post + body + params)
    $all = $request->all();

    // Utilitaires
    $request->isJson();           // Content-Type: application/json ?
    $request->isLowBandwidth();   // ?lb=1 ou ?compact=1 ou X-Low-Bandwidth: 1
    $request->wantsFields();      // ?fields=id,name → ['id','name'] ou null
    $request->acceptsGzip();      // Accept-Encoding: gzip + extension zlib ?

    return ['id' => $id];
}
```

---

Response
--------

[](#response)

```
use Briko\Http\Response;

// JSON automatique si array/object (défaut)
return ['status' => 'ok', 'data' => $users];

// Méthodes statiques
Response::json(['key' => 'value'], 201);
Response::html('Bonjour', 200);
Response::notFound('Utilisateur introuvable');
Response::error('Erreur serveur', 500);
```

Les réponses JSON incluent automatiquement `JSON_UNESCAPED_UNICODE` — les caractères spéciaux africains s'affichent correctement.

---

Middleware
----------

[](#middleware)

### Middlewares intégrés

[](#middlewares-intégrés)

MiddlewareRôle`Guard`Exemple de blocage par header`OfflineFirst`Cache GET + queue writes si DB/service down`LowBandwidth`Gzip + sélection de champs + strip nulls`HttpLogger`Log automatique requête/réponse + détection slow### Créer un middleware personnalisé

[](#créer-un-middleware-personnalisé)

```
