Développement d'un framework PHP
Fonctionnalités
- Générales :
- Autoloader (PSR-4)
- Conteneur / dépendance d'injection (PSR-11, Container-Interop/Service-Provider)
- Abstraction de BDD : PDO
- Cache (PSR-16)
- Config : chargement et registre
- Debug
- Http : abstraction de la couche HTTP (PSR-7, PSR-15, PSR-17)
- Log (PSR-3)
- Utilitaires : classes outils.
- Routage : routage de requête http.
- Session : gestionnaire de session (abstraction de $_SESSION)
- Ligne de commande :
- Cli + Script
- Web services :
- Serveur REST
- Service REST
- Client REST
- Web socket / Long polling :
- Event loop
- Serveur de websocket / Long polling (?)
- Application web :
- HMVC : Controleur + Modele + Vue + Dispatcher
- Templating : Php
- URI : via PSR7 HTTP/URI
- I18N
- Autres :
- Auth : via Json Web Token.
- Acls : gestion des droits.
Dépendances
- PSR-3 : Psr/Log v1.0
- PSR-4 Autoloader :
- PSR-7 : Psr/Http/Message v1.0
- PSR-11 : Psr/Container v1.0
- PSR-15 : HTTP Middlewares
- PSR-16 : Simple Cache
- PSR-17 : HTTP Factories
- Container-Interop/Service-Provider : https://github.com/container-interop/service-provider
Sources
- Core : PSR-4 (Autoloader)
- Cache : PSR-16, PhpFastCache
- Config :
- DependencyInjection : Simplex
- HTTP : Slim 3 & Guzzle PSR7
- Rest : Slim3 (serveur) & Guzzle PSR7 (client)
- Session : Symfony Http Foundation Component
Ressources
Software As a Service
ACLs
Docs :
Dependency Injection/Service Location
Codes sources de Conteneurs :
- Container Interop : standard d’interopérabilité entre Conteneur (DI)
Docs :
Notes :
- Voir le pattern Service Locator et la différence avec un DI Container.
- Exemple de DIC performants : Dice, Aura and Orno
- Problème éventuel et solution : Using abstract factories with Slim 3
- Aura gère les paramètres dans les appels aux classes du conteneur. C'est la solution retenu pour le Framework.
Config
- INI :
- YAML :
- Symfony YAML : Yaml 1.2
- Spyc : Yaml 1.1
Cache
Console (CLI)
Codes sources :
Docs :
Database
Principes intéressants :
Autres possibilités :
I18N
Logger
- Chrome Logger : permet d'afficher les messages de log côté Console du navigateur.
MVC
MVC : dispatcher
- Dispatching is the process of taking the request object, extracting the module name, controller name, action name, and optional parameters contained in it, and then instantiating a controller and calling an action of that controller.
MVC : hiérarchique (HMVC)
REST : Client
- Guzzle : PSR-7
REST : Serveur
- Slim 3 : PSR-7
Router
- Routing is the process of taking a URI endpoint (that part of the URI which comes after the base URL) and decomposing it into parameters to determine which module, controller, and action of that controller should receive the request
- Source :
- FastRoute : plusieurs solutions de routage, très performant… trop de fichiers…
- AltoRouter : très simple 1 fichier ! Modifier le Router actuel selon ce principe mais avec l'analyse des Regexp de Fastroute
- Voir :
Websocket
Code source :
- React PHP - Event loop : fourni une boucle d'évènement (event loop), “Event-driven, non-blocking I/O with PHP”.
Docs :