constructionsincongrues / asset-gatherer
A PHP package to gather assets based on HTTP request rules and configuration in YAML.
Requires
- php: >=7.4
- nyholm/psr7: ^1.8
- psr/http-factory: ^1.1
- symfony/yaml: ^5.0 || ^6.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
Le package AssetGatherer
permet de collecter des ressources (images, CSS, JavaScript, etc.) en fonction de règles définies pour chaque requête HTTP. Ces règles sont configurées dans un fichier YAML. Les ressources sont organisées en groupes appelés bundles, qui peuvent regrouper des fichiers de différents types selon les sections de l'application.
Table des Matières
- Installation
- Configuration
- Diagrammes C4
- Utilisation avec PSR-7
- Utilisation avec Répertoire de Base
- Utilisation du Dev Container
- Exécution des Tests
Installation
-
Installer le composant YAML de Symfony pour pouvoir lire les configurations YAML :
composer require symfony/yaml
-
Installer PHPUnit pour les tests unitaires :
composer require --dev phpunit/phpunit
Configuration
La configuration du package AssetGatherer
se fait via un fichier YAML. Chaque bundle peut définir des répertoires et types de fichiers spécifiques, ainsi que des règles conditionnelles en fonction de la requête HTTP (URL, headers, paramètres de requête).
Structure du Fichier YAML
# config/bundles.yaml homepage: images: directories: ["homepage/images"] extensions: ["jpg", "png"] css: directories: ["homepage/css"] extensions: ["css"] rules: pathContains: "/homepage" dashboard: javascript: directories: ["dashboard/js"] extensions: ["js"] rules: query: admin: "true" user: regex: "/^user[0-9]+$/"
Diagrammes C4
Diagramme de Contexte
Diagramme de Conteneur
Diagramme de Composant
Utilisation avec Répertoire de Base
Le package AssetGatherer
prend en charge un répertoire de base pour les bundles. En définissant un répertoire de base, tous les chemins spécifiés dans la configuration YAML sont interprétés comme étant relatifs à ce répertoire.
Exemple d’Utilisation avec Répertoire de Base
use AssetGatherer\AssetGatherer; use Nyholm\Psr7\ServerRequest; // Définissez un répertoire de base pour les fichiers d'assets $baseDirectory = '/var/www/assets'; $assetGatherer = new AssetGatherer($baseDirectory); $assetGatherer->loadConfiguration('config/bundles.yaml'); // Créez une requête HTTP PSR-7 $request = new ServerRequest('GET', '/homepage', [ 'User-Agent' => 'Chrome', 'Accept' => 'text/html' ]); // Collectez les ressources en fonction de la requête $assetGatherer->gatherAssetsForRequest($request); // Récupérez et affichez les ressources collectées $assets = $assetGatherer->getAssets(); print_r($assets);
Dans cet exemple :
- Répertoire de Base : Le répertoire de base
/var/www/assets
est utilisé pour préfixer tous les chemins des répertoires définis dansbundles.yaml
. - Collecte des Ressources : Le package cherchera les fichiers dans les répertoires définis dans
bundles.yaml
, relatifs au répertoire de base.
Utilisation avec PSR-7
Le package AssetGatherer
utilise maintenant PSR-7 pour représenter les requêtes HTTP. Cela permet d'utiliser n'importe quelle implémentation compatible avec PSR-7, comme nyholm/psr7
ou guzzlehttp/psr7
.
Prérequis
Assurez-vous d'avoir une implémentation PSR-7 installée dans votre projet, par exemple :
composer require nyholm/psr7
Création d'une Requête HTTP avec PSR-7
use Nyholm\Psr7\ServerRequest; $request = new ServerRequest('GET', '/homepage', [ 'User-Agent' => 'Chrome', 'Accept' => 'text/html' ]);
Utilisation du Dev Container
Le projet inclut une configuration de Dev Container pour un environnement de développement reproductible.
Avant de commencer
- Docker : Assurez-vous que Docker est installé et en cours d'exécution.
- Visual Studio Code : Utilisez l'extension "Remote - Containers".
Démarrage du Dev Container
- Ouvrez le projet dans Visual Studio Code.
- Ouvrez le Dev Container : Appuyez sur
F1
, tapezRemote-Containers: Reopen in Container
, et sélectionnez cette option.
Exécution des Tests
vendor/bin/phpunit tests/AssetGathererTest.php
Cette documentation couvre l'installation, la configuration, l'utilisation, et les tests du package AssetGatherer
.