ndeyaichasene / core
Package PHP réutilisable pour les applications MVC
Requires
- php: ^8.3
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
NdeyeAicha Core est un package PHP léger et réutilisable destiné aux applications PHP orientées objet et aux architectures MVC.
Il regroupe plusieurs classes utilitaires permettant de centraliser des fonctionnalités courantes :
- gestion des requêtes HTTP ;
- gestion des sessions ;
- connexion et requêtes à la base de données ;
- validation des données ;
- rendu des vues ;
- redirections ;
- débogage.
Le package est conçu pour être facilement intégré à différents projets PHP grâce à Composer et à l'autoloading PSR-4.
Sommaire
Prérequis
Avant d'utiliser ce package, votre environnement doit disposer de :
- PHP 8.3 ou supérieur
- Composer
- PDO
Pour utiliser PostgreSQL :
pdo_pgsql
Pour utiliser MySQL :
pdo_mysql
Installation
Installez le package avec Composer :
composer require ndeyaichasene/core
Composer installera automatiquement le package et son autoloader.
Dans votre projet PHP :
<?php require_once __DIR__ . '/vendor/autoload.php';
Vous pouvez ensuite utiliser les classes du package :
<?php use App\Core\Debug; Debug::dump('Hello Core');
Autoload PSR-4
Le package utilise l'autoloading PSR-4 avec le namespace :
App\Core\
La configuration dans composer.json est :
"autoload": { "psr-4": { "App\\Core\\": "" } }
Par exemple, le fichier :
Database.php
correspond à :
<?php namespace App\Core; class Database { // ... }
Après une modification de l'autoloading, exécutez :
composer dump-autoload
Fonctionnalités
1. Controller
La classe Controller permet de centraliser certaines fonctionnalités utilisées dans les contrôleurs MVC :
- affichage des vues ;
- affichage d'une vue avec un layout ;
- redirection vers une route.
Afficher une vue
<?php use App\Core\Controller; Controller::renderView('users', [ 'title' => 'Liste des utilisateurs', 'users' => $users ]);
La méthode recherche par défaut :
views/users/index.php
Les données sont disponibles dans la vue à travers :
$viewData
Utiliser un autre dossier de vues
Controller::renderView( 'users', ['users' => $users], 'app/views' );
Afficher une vue avec un layout
Controller::renderViewLayout( 'users', 'app', [ 'title' => 'Liste des utilisateurs', 'users' => $users ] );
La structure attendue est :
views/
├── layout/
│ └── app.php
└── users/
└── index.php
Le contenu de users/index.php est capturé puis placé dans :
$contentView
Le layout peut donc utiliser :
<?= $contentView ?>
Redirection
Controller::redirectToRoute('users');
Avec une URL de base :
Controller::redirectToRoute( 'users', '/mon-projet' );
2. Database
La classe Database permet de centraliser la connexion à une base de données avec PDO.
Elle permet notamment :
- d'initialiser la connexion ;
- de récupérer l'instance PDO ;
- d'exécuter des requêtes SQL ;
- d'utiliser des requêtes préparées ;
- de récupérer un ou plusieurs résultats ;
- d'exécuter des opérations
INSERT,UPDATEetDELETE; - de récupérer le dernier identifiant inséré ;
- de récupérer toutes les données d'une table.
Initialiser la connexion
PostgreSQL :
<?php use App\Core\Database; Database::init( 'localhost', 'ma_base', 'postgres', 'password', 'pgsql' );
MySQL :
<?php use App\Core\Database; Database::init( 'localhost', 'ma_base', 'root', 'password', 'mysql' );
Récupérer l'instance PDO
$pdo = Database::getInstance();
Exécuter une requête préparée
Pour récupérer un seul résultat :
$user = Database::executeQuery( 'SELECT * FROM users WHERE email = :email', [ 'email' => 'user@example.com' ] );
Pour récupérer plusieurs résultats :
$users = Database::executeQuery( 'SELECT * FROM users WHERE status = :status', [ 'status' => 'active' ], false );
Exécuter une requête sans paramètres
$users = Database::query( 'SELECT * FROM users', false );
INSERT
$id = Database::executeUpdate( 'INSERT INTO users (nom, email) VALUES (:nom, :email)', [ 'nom' => 'Aicha', 'email' => 'aicha@example.com' ] );
Pour un INSERT, la méthode retourne le dernier identifiant inséré.
UPDATE
$affectedRows = Database::executeUpdate( 'UPDATE users SET nom = :nom WHERE id = :id', [ 'nom' => 'Aicha Sene', 'id' => 1 ] );
La méthode retourne le nombre de lignes modifiées.
DELETE
$affectedRows = Database::executeUpdate( 'DELETE FROM users WHERE id = :id', [ 'id' => 1 ] );
Récupérer toutes les données d'une table
$users = Database::getAllData('users');
3. Debug
La classe Debug fournit deux méthodes simples pour faciliter le débogage.
dump()
dump() affiche une variable sans arrêter l'exécution du programme.
<?php use App\Core\Debug; Debug::dump($data);
dd()
dd() signifie généralement Dump and Die.
La méthode affiche la variable puis arrête l'exécution du programme.
<?php use App\Core\Debug; Debug::dd($data);
Exemple :
Debug::dd($users);
4. Request
La classe Request centralise l'accès aux données des requêtes HTTP.
Elle permet de :
- récupérer la méthode HTTP ;
- vérifier si la requête est
GET; - vérifier si la requête est
POST; - récupérer une donnée
GET; - récupérer une donnée
POST; - récupérer toutes les données ;
- récupérer l'URI actuelle.
Récupérer la méthode HTTP
$method = Request::getMethod();
Exemple :
GET
ou :
POST
Vérifier une requête GET
if (Request::isGet()) { // Traitement }
Vérifier une requête POST
if (Request::isPost()) { // Traitement }
Récupérer une donnée GET
Pour une URL :
/users?page=2
on peut utiliser :
$page = Request::get('page', 1);
Si page n'existe pas, la valeur 1 sera utilisée.
Récupérer une donnée POST
$email = Request::post('email', '');
Récupérer toutes les données
$data = Request::all();
Pour une requête GET, la méthode retourne $_GET.
Pour une requête POST, elle retourne $_POST.
Récupérer l'URI
$uri = Request::uri();
5. SessionManager
La classe SessionManager simplifie la gestion des sessions PHP.
Elle permet de :
- démarrer une session ;
- enregistrer une donnée ;
- récupérer une donnée ;
- vérifier l'existence d'une donnée ;
- supprimer une donnée ;
- récupérer toutes les données ;
- vider la session ;
- détruire complètement la session.
Démarrer une session
use App\Core\SessionManager; SessionManager::startSession();
Il est également possible d'utiliser :
SessionManager::initSession();
Enregistrer une donnée
SessionManager::setSession( 'user', [ 'id' => 1, 'nom' => 'Aicha' ] );
Récupérer une donnée
$user = SessionManager::getSession('user');
Avec une valeur par défaut :
$page = SessionManager::getSession('page', 1);
Vérifier l'existence d'une donnée
if (SessionManager::hasSession('user')) { // La session existe }
Supprimer une donnée
SessionManager::unsetSession('user');
Il est également possible d'utiliser :
SessionManager::remove('user');
Récupérer toute la session
$session = SessionManager::all();
Vider les données de session
SessionManager::clear();
Détruire complètement la session
SessionManager::destroySession();
6. Validator
La classe Validator permet de réaliser différentes validations sur les données provenant notamment des formulaires.
Les validations disponibles sont :
| Méthode | Description |
|---|---|
required() |
Vérifie qu'une valeur est renseignée |
unique() |
Vérifie qu'une valeur n'existe pas déjà dans un tableau |
isEmail() |
Vérifie qu'une valeur est une adresse email valide |
numeric() |
Vérifie qu'une valeur est numérique |
isPositive() |
Vérifie qu'une valeur est positive ou nulle |
required()
Vérifie qu'une valeur n'est pas null et qu'elle n'est pas vide.
$errors = []; Validator::required( $_POST['nom'] ?? null, 'nom', $errors );
Avec un message personnalisé :
Validator::required( $_POST['nom'] ?? null, 'nom', $errors, 'Le nom est obligatoire' );
isEmail()
Vérifie le format d'une adresse email.
Validator::isEmail( $_POST['email'] ?? '', 'email', $errors );
Avec un message personnalisé :
Validator::isEmail( $_POST['email'] ?? '', 'email', $errors, 'Adresse email invalide' );
numeric()
Vérifie si une valeur est numérique.
if (Validator::numeric($value)) { // La valeur est numérique }
isPositive()
Vérifie qu'une valeur est numérique et supérieure ou égale à zéro.
Validator::isPositive( $_POST['quantite'] ?? null, 'quantite', $errors );
Exemple avec un message personnalisé :
Validator::isPositive( $_POST['prix'] ?? null, 'prix', $errors, 'Le prix doit être positif' );
unique()
Vérifie qu'une valeur n'existe pas déjà dans un tableau de données.
La méthode accepte des tableaux associatifs ou des objets.
$users = [ ['email' => 'aicha@example.com'], ['email' => 'fatou@example.com'] ]; $errors = []; Validator::unique( 'aicha@example.com', 'email', $users, $errors );
La validation échouera si la valeur existe déjà.
Structure du package
La structure actuelle du package est :
core/
├── composer.json
├── README.md
├── LICENSE
├── .gitignore
├── Controller.php
├── Database.php
├── Debug.php
├── Request.php
├── SessionManager.php
└── Validator.php
Toutes les classes utilisent le namespace :
App\Core
Exemple :
use App\Core\Controller; use App\Core\Database; use App\Core\Debug; use App\Core\Request; use App\Core\SessionManager; use App\Core\Validator;
Exemple d'utilisation
Après avoir installé le package :
composer require ndeyaichasene/core
Vous pouvez utiliser plusieurs composants dans votre application MVC :
<?php require_once __DIR__ . '/vendor/autoload.php'; use App\Core\Database; use App\Core\Request; use App\Core\Validator; use App\Core\Debug; Database::init( 'localhost', 'mon_application', 'postgres', 'password', 'pgsql' ); $errors = []; $email = Request::post('email'); Validator::required( $email, 'email', $errors ); Validator::isEmail( $email, 'email', $errors ); if (!empty($errors)) { Debug::dump($errors); }
Auteur
Ndeye Aissatou Sene
Email : ndeyaichasene@gmail.com
GitHub : ndeyaichasene
Licence
Ce package est distribué sous licence MIT.
Voir le fichier LICENSE pour plus d'informations.