adja/core-ex

core normal

Maintainers

Package info

github.com/AdjaNdour/php-core-ex

pkg:composer/adja/core-ex

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-08-27 20:31 UTC

This package is auto-updated.

Last update: 2026-08-27 20:33:17 UTC


README

PHP Version License

Adja Core est une bibliothèque PHP légère, modulaire et réutilisable conçue pour servir de socle aux applications PHP orientées objet et aux architectures MVC fondées sur le concept d'héritage.

Elle fournit les composants essentiels pour structurer une application : contrôleur de base, gestionnaire de base de données, requêtes HTTP, sessions, validation, helpers et outils de débogage.

Sommaire

Prérequis

Avant d'utiliser Adja Core, votre environnement doit disposer de :

  • PHP 8.3 ou supérieur
  • Composer
  • PDO (pdo_pgsql pour PostgreSQL, pdo_mysql pour MySQL)
  • mbstring

Installation

Installez le package avec Composer :

composer require adja/core-ex

Dans votre application PHP, chargez l'autoloader :

<?php

require_once __DIR__ . '/vendor/autoload.php';

Autoload PSR-4

Adja Core utilise l'autoloading PSR-4 avec le namespace My\Core\ :

{
    "autoload": {
        "psr-4": {
            "My\\Core\\": "src/"
        }
    }
}

Toutes les classes du package sont situées dans le dossier src/ :

namespace My\Core;

Après modification de l'autoload, régénérez-le avec :

composer dump-autoload

Fonctionnalités

1. Controller (Héritage)

La classe abstraite My\Core\Controller sert de classe mère pour tous vos contrôleurs. Vos contrôleurs héritent des méthodes de rendu de vue et de redirection grâce au mot-clé extends.

Exemple de contrôleur enfant

<?php

namespace App\Controller;

use My\Core\Controller;

class UserController extends Controller
{
    public function index(): void
    {
        $users = [
            ['id' => 1, 'nom' => 'Adja']
        ];

        // Rendu simple d'une vue (ex: views/users/index.php)
        $this->renderView('users', [
            'title' => 'Liste des utilisateurs',
            'users' => $users
        ]);
    }

    public function showProfile(): void
    {
        // Rendu avec layout (ex: views/users/index.php dans views/layout/app.php)
        $this->renderViewLayout('users', 'app', [
            'title' => 'Profil utilisateur'
        ]);
    }

    public function store(): void
    {
        // Traitement...

        // Redirection vers une route
        $this->redirectToRoute('users');
    }
}

Méthodes protégées disponibles (via $this->) :

  • $this->renderView(string $folder, array $data = [], string $viewsPath = 'views') : Charge et affiche la vue index.php du dossier spécifié.
  • $this->renderViewLayout(string $folder, string $layout, array $data = [], string $viewsPath = 'views') : Injecte la vue dans la variable $contentView du layout.
  • $this->redirectToRoute(string $uri, string $baseUrl = '') : Effectue une redirection HTTP Location et stoppe le script.

2. Database (Héritage)

La classe abstraite My\Core\Database centralise la connexion PDO et l'exécution des requêtes SQL. Elle est conçue pour être étendue par vos classes Repositories ou Modèles.

Initialisation globale de la connexion

À configurer au démarrage de l'application (ex: dans public/index.php) :

<?php

use My\Core\Database;

// Exemple PostgreSQL :
Database::init(
    host: 'localhost',
    port: 5432,
    database: 'mon_app_db',
    username: 'postgres',
    password: 'secret_password',
    driver: 'pgsql'
);

// Exemple MySQL :
Database::init(
    host: '127.0.0.1',
    port: 3306,
    database: 'mon_app_db',
    username: 'root',
    password: '',
    driver: 'mysql'
);

Exemple de Repository enfant qui hérite de Database

<?php

namespace App\Model\Repository;

use My\Core\Database;

class UserRepository extends Database
{
    public function findById(int $id): ?object
    {
        // executeQuery() est directement héritée de Database
        return $this->executeQuery(
            'SELECT * FROM users WHERE id = :id',
            ['id' => $id],
            true
        );
    }

    public function findAll(): array
    {
        return $this->executeQuery(
            'SELECT * FROM users ORDER BY id DESC',
            [],
            false
        );
    }

    public function create(string $nom, string $email): int|string
    {
        return $this->executeUpdate(
            'INSERT INTO users (nom, email) VALUES (:nom, :email)',
            ['nom' => $nom, 'email' => $email]
        );
    }

    public function update(int $id, string $nom): int
    {
        return (int) $this->executeUpdate(
            'UPDATE users SET nom = :nom WHERE id = :id',
            ['nom' => $nom, 'id' => $id]
        );
    }

    public function delete(int $id): int
    {
        return (int) $this->executeUpdate(
            'DELETE FROM users WHERE id = :id',
            ['id' => $id]
        );
    }
}

3. Request

La classe My\Core\Request permet d'accéder facilement aux données HTTP de manière statique :

<?php

use My\Core\Request;

if (Request::isPost()) {
    $email = Request::post('email', '');
}

if (Request::isGet()) {
    $page = (int) Request::get('page', 1);
}

$method = Request::getMethod(); // 'GET', 'POST', etc.
$allData = Request::all();      // Contenu combiné GET / POST
$uri = Request::uri();          // Chemin URL

4. Validator

La classe My\Core\Validator permet de valider les formulaires et de collecter les erreurs dans un tableau :

<?php

use My\Core\Validator;

$errors = [];

$nom = $_POST['nom'] ?? null;
$email = $_POST['email'] ?? null;
$quantite = $_POST['quantite'] ?? null;

Validator::required($nom, 'nom', $errors, 'Le nom est obligatoire.');
Validator::minLength($nom, 3, 'nom', $errors, 'Le nom doit contenir au moins 3 caractères.');
Validator::maxLength($nom, 50, 'nom', $errors, 'Le nom ne doit pas dépasser 50 caractères.');
Validator::isEmail($email, 'email', $errors, 'Adresse email invalide.');
Validator::isPositive($quantite, 'quantite', $errors, 'La quantité doit être positive.');

if (Validator::hasErrors($errors)) {
    // Il y a des erreurs de validation
}

Méthodes disponibles

Méthode Description
required($val, $key, &$errors, $msg) Vérifie qu'une valeur n'est ni nulle ni vide
isPositive($val, $key, &$errors, $msg) Vérifie qu'un nombre est supérieur ou égal à 0
isGreaterThanZero($val, $key, &$errors, $msg) Vérifie qu'un nombre est strictement positif (> 0)
isEmail($val, $key, &$errors, $msg) Valide le format d'adresse email
minLength($val, $min, $key, &$errors, $msg) Vérifie la taille minimale d'une chaîne
maxLength($val, $max, $key, &$errors, $msg) Vérifie la taille maximale d'une chaîne
unique($val, $key, $datas, &$errors, $req, $msg) Vérifie l'unicité d'une valeur dans un ensemble
hasErrors($errors) Renvoie true si le tableau d'erreurs n'est pas vide

5. SessionManager

My\Core\SessionManager encapsule et sécurise la manipulation de $_SESSION :

<?php

use My\Core\SessionManager;

// Stocker des données
SessionManager::setData('user', ['id' => 1, 'nom' => 'Adja']);

// Récupérer des données (avec valeur par défaut facultative)
$user = SessionManager::getData('user');
$page = SessionManager::getData('page', 1);

// Vérifier l'existence d'une clé
if (SessionManager::hasKey('user')) {
    // Utilisateur connecté
}

// Supprimer une clé
SessionManager::removeData('user');

// Récupérer toutes les variables de session
$all = SessionManager::getAllSession();

// Vider la session
SessionManager::clearSession();

// Détruire complètement la session et son cookie
SessionManager::destroySession();

6. Helpers

My\Core\Helpers fournit des méthodes utilitaires pour les vues PHP :

<?php

use My\Core\Helpers;

Assets et Liens

<!-- Lien vers un asset statique -->
<link rel="stylesheet" href="<?= Helpers::asset('css/style.css', '/mon-app') ?>">

<!-- Générer une URL -->
<a href="<?= Helpers::pathUrl('users/create') ?>">Nouveau</a>

Formulaires et Navigation

<!-- Récupérer l'ancienne valeur d'un champ -->
<input type="text" name="nom" value="<?= Helpers::old($_POST, 'nom') ?>">

<!-- Pré-sélectionner une option dans un <select> -->
<option value="1" <?= Helpers::selected($selectedId, 1) ?>>Admin</option>

<!-- Cocher une checkbox -->
<input type="checkbox" name="actif" <?= Helpers::checked($status, 'actif') ?>>

<!-- Appliquer une classe active sur un menu -->
<a href="/users" class="<?= Helpers::active($currentUri, '/users') ?>">Utilisateurs</a>

7. Debug

My\Core\Debug permet d'inspecter rapidement les variables lors du développement :

<?php

use My\Core\Debug;

// Affichage formaté sans stopper l'exécution
Debug::dump($data);

// Affichage formaté puis arrêt immédiat du script (exit)
Debug::dd($data);

Structure du package

core-ex/
├── src/
│   ├── Controller.php       # Classe abstraite de base pour les contrôleurs
│   ├── Database.php         # Classe abstraite de base pour les repositories/modèles
│   ├── Debug.php            # Outils de débogage (dump, dd)
│   ├── Helpers.php          # Aides pour les vues (assets, formulaires, urls)
│   ├── Request.php          # Gestion des requêtes HTTP (GET, POST, uri)
│   ├── SessionManager.php   # Gestionnaire de sessions PHP
│   └── Validator.php        # Validateur de formulaires
├── composer.json
├── README.md
└── LICENSE

Exemple d'utilisation dans une architecture MVC

<?php

namespace App\Controller;

use My\Core\Controller;
use My\Core\Request;
use My\Core\Validator;
use My\Core\SessionManager;
use App\Model\Repository\UserRepository;

class AuthController extends Controller
{
    private UserRepository $userRepository;

    public function __construct()
    {
        $this->userRepository = new UserRepository();
    }

    public function login(): void
    {
        $errors = [];

        if (Request::isPost()) {
            $email = trim((string) Request::post('email', ''));
            $password = (string) Request::post('password', '');

            Validator::required($email, 'email', $errors, "L'email est obligatoire.");
            Validator::isEmail($email, 'email', $errors, "Email invalide.");
            Validator::required($password, 'password', $errors, "Le mot de passe est obligatoire.");

            if (!Validator::hasErrors($errors)) {
                $user = $this->userRepository->findByEmail($email);

                if ($user && password_verify($password, $user->password)) {
                    SessionManager::setData('userConnect', $user);
                    $this->redirectToRoute('dashboard');
                } else {
                    $errors['auth'] = "Identifiants incorrects.";
                }
            }
        }

        $this->renderView('auth/login', [
            'errors' => $errors
        ]);
    }
}

Auteur

AdjaNdour
Email : adjacourandour4@gmail.com

Licence

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.