Download the PHP package andydefer/laravel-directive without Composer
On this page you can find all versions of the php package andydefer/laravel-directive. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/laravel-directive
More information about andydefer/laravel-directive
Files in andydefer/laravel-directive
Package laravel-directive
Short Description A flexible CLI command system for Laravel that breaks free from Artisan's constraints. Directives introduces a clean separation between what your command does (business logic) and how it's presented (output/UI).
License MIT
Informations about the package laravel-directive
Laravel Directive
Un framework CLI pour Laravel. Orchestration de pipelines, contexte partagé, découverte automatique, appels internes - avec ou sans Laravel.
Table des matières
- Installation
- Philosophie : Créez votre propre CLI
- Première directive
- Signature des commandes
- Structure de la signature
- Arguments requis
- Arguments par défaut
- Arguments nullables
- Arguments variadiques
- Flags
- Énumérations
- Commentaires inline
- Ordre strict des éléments
- Formatage des espaces avec
^ - Tokens spéciaux
- Tags personnalisés
- Accès aux arguments et options
- Contexte partagé
- Appels internes (call)
- Découverte automatique
- Journalisation JSONL
- Suggestions de commandes
- Mode verbose et débogage
- Directives intégrées
- Exécution hors CLI
- Mode autonome (sans Laravel)
- Tests des directives
- Cas d'usage concrets
- Bonnes pratiques
- Référence des codes de sortie
Installation
Prérequis : PHP 8.1+ | Laravel 12.x, 13.x, 14.x ou 15.x
Philosophie : Créez votre propre CLI
Ce package n'est pas un simple binaire préfabriqué. C'est un framework pour construire votre propre système CLI adapté à vos besoins métier.
Le binaire fourni (vendor/bin/directive) est un exemple de démonstration, pas une solution finale.
Pourquoi créer votre propre CLI ?
✅ Contrôle total - Vous décidez des commandes, des providers, des sources ✅ Logique métier - Intégration parfaite avec votre domaine applicatif ✅ Providers personnalisés - Enregistrez vos propres services et dépendances ✅ Performance - Chargez uniquement ce dont vous avez besoin ✅ Sécurité - Contrôle d'accès granulaire ✅ Évolutivité - Facile à étendre avec votre code
Créer votre point d'entrée
Première directive
1. Créer la classe
2. Exécuter avec votre CLI
Signature des commandes
La signature est la clé de voûte du système. Elle définit la structure complète d'une commande : son nom, ses arguments, ses flags, ses énumérations et plus encore.
Le parseur de signature est basé sur php-signature-parser et supporte une syntaxe riche et expressive.
Structure de la signature
Arguments requis
Les arguments requis sont obligatoires. La commande échoue si l'utilisateur ne les fournit pas.
Arguments par défaut
Les arguments par défaut fournissent une valeur si l'utilisateur n'en spécifie pas.
Arguments nullables
Les arguments nullables peuvent recevoir la valeur null explicitement.
Arguments variadiques
Les arguments variadiques capturent zéro, une ou plusieurs valeurs.
Flags
Les flags sont des options booléennes. Présents = true, absents = false.
Énumérations
Les énumérations restreignent les valeurs autorisées.
Syntaxe
États possibles
| État | Syntaxe | Description |
|---|---|---|
| Requis | =* |
Doit être fourni |
| Optionnel | =? |
Peut être ~ (skip) |
| Défaut | =default |
Valeur par défaut |
Exemples
Accès aux énumérations
Commentaires inline
Les commentaires documentent chaque argument directement dans la signature.
Ordre strict des éléments
⚠️ L'ordre des éléments dans la signature est STRICT et IMPÉRATIF.
| Ordre | Type | Syntaxe | Exemple |
|---|---|---|---|
| 1 | Source | command |
backup |
| 2 | Requis | {name} |
{source} {destination} |
| 3 | Par défaut | {name=value} |
{format=zip} {output=dist} |
| 4 | Nullable | {name=?} |
{env=?} {port=?} |
| 5 | Enum | ::name->[values]=state |
::level->[low,high]=medium |
| 6 | Variadique | {name*} |
{excludes*} {purpose*} |
| 7 | Flags | {--flag} |
{--force} {--verbose} |
| 8 | Tags personnalisés | <key="value"> |
<user="admin"> |
Exemples d'ordre valide
Exemples d'ordre invalide
Formatage des espaces avec ^
Le parseur remplace automatiquement les caractères ^ par des espaces.
| Saisie utilisateur | Valeur réelle |
|---|---|
John^Doe |
John Doe |
Hello^World! |
Hello World! |
C:/Program^Files |
C:/Program Files |
Tokens spéciaux
Le token ? (null explicite)
Permet de passer explicitement null comme valeur.
Le token ~ (skip)
Permet de sauter un argument.
| Cas | Comportement |
|---|---|
| Argument requis | ~ → null |
| Argument par défaut | ~ → utilise la valeur par défaut |
| Argument nullable | ~ → null |
| Enum avec défaut | ~ → utilise la valeur par défaut |
| Enum optionnel | ~ → null |
Tags personnalisés
Les tags permettent d'ajouter des données supplémentaires sans modifier la signature.
Accès aux arguments et options
Méthodes principales
Recherche d'arguments avec getArgument()
getArgument() recherche dans l'ordre de priorité :
- Arguments requis
- Arguments par défaut
- Énumérations
- Arguments variadiques (retourne un tableau)
- Flags (retourne un booléen)
Contexte partagé
Le contexte est un MapCollection mutable accessible par toutes les directives.
Méthodes du contexte
Exemple : Pipeline de traitement
Appels internes (call)
La méthode call() permet d'exécuter d'autres directives depuis une directive.
Syntaxe
Détection de circularité
Laravel Directive détecte automatiquement les appels circulaires :
Pipeline de déploiement
Découverte automatique
Laravel Directive découvre automatiquement les directives via AST (Abstract Syntax Tree).
Sources de découverte
| Source | Description | Dossier par défaut |
|---|---|---|
| Built-in | Directives intégrées | src/BuiltIn/ |
| Workspace | Directives de l'application | src/Directives/, app/Directives/ |
| Vendor | Directives des packages | vendor/*/src/Directives/ |
| Custom | Sources configurées | Configurable |
Filtrer la découverte
Système de problèmes
Le système de découverte collecte automatiquement les problèmes :
Journalisation JSONL
Chaque exécution est automatiquement journalisée au format JSONL.
Structure du log
Configuration
Suggestions de commandes
Laravel Directive utilise un BK-tree (distance de Levenshtein) pour suggérer des commandes similaires.
Les alias sont également pris en compte.
Mode verbose et débogage
Le mode verbose affiche automatiquement les problèmes rencontrés.
Activation
Audit du noyau
Directives intégrées
| Directive | Description | Alias |
|---|---|---|
help |
Affiche l'aide | -h, --help |
list |
Liste toutes les directives | ls, -l, --list |
version |
Affiche la version | -v, --version |
clean-logs [days] |
Nettoie les logs | - |
kernel:audit |
Audit du noyau | audit |
Exécution hors CLI
Les directives peuvent être exécutées dans n'importe quel contexte PHP.
Dans un contrôleur Laravel
Dans un job Laravel
Dans un service métier
Mode autonome (sans Laravel)
Script d'entrée
Tests des directives
DirectiveTestingService permet de tester les directives en isolation.
Cas d'usage concrets
Pipeline de déploiement
Data processing pipeline
Bonnes pratiques
✅ Injection de services
✅ Validation des arguments
✅ Utiliser le contexte pour les données partagées
✅ Hooks before/after
✅ Créer son propre CLI
Référence des codes de sortie
| Code | Label | Description |
|---|---|---|
0 |
SUCCESS | Exécution réussie |
1 |
FAILURE | Échec général |
2 |
INVALID_ARGUMENT | Argument invalide |
3 |
NOT_FOUND | Directive non trouvée |
4 |
PERMISSION_DENIED | Permission refusée |
5 |
RUNTIME_ERROR | Erreur d'exécution |
6 |
INVALID_SIGNATURE | Signature invalide |
7 |
CONFLICT | Conflit (circularité) |
8 |
DEPENDENCY_ERROR | Erreur de dépendance |
Licence
MIT © Andy Defer
All versions of laravel-directive with dependencies
laravel/framework Version ^12.0|^13.0|^14.0|^15.0
nikic/php-parser Version ^5.8
andydefer/algo-kit Version ^0.8.14
andydefer/laravel-jsonl Version ^0.8.16
andydefer/php-signature-parser Version ^0.12.0
andydefer/php-console Version ^1.6.14