Référence
Commandes phpx
| Commande | Type | Description |
|---|---|---|
new <répertoire> | projet | Scaffolde un nouveau projet (android/, ios/, lib/, public/, assets/, bin/) avec un écran de démarrage minimal et un composer.json pointant vers les packages Packagist phpnitro/* |
make:page <Nom> [route] | projet | Génère une page + un contrôleur backend jumeau, enregistre les deux routes (écran et /api/...) |
make:entity <Nom> | projet | Génère une entité + un repository jumeau (schéma SQLite auto-créé, find()/save()) |
serve [port] | projet | Sert public/ (défaut : 8090) — synchronise assets/ et .env's APP_NAME avant de lancer php -S |
bundle:android | android | Copie (et minifie) public/ + lib/ + packages/*/src + .env dans android/app/src/main/assets/www/, avec composer install --no-dev dans ce staging |
build:android [debug|release] | android | bundle:android puis gradle :app:assemble... — installe Gradle/le SDK Android automatiquement si absents |
dev:push [--watch] | android | Pousse le PHP directement dans files/www de l'app déjà installée sur un device connecté (adb), rechargement de l'écran courant sans rebuild/reinstall ; --watch repousse à chaque changement de fichier détecté |
icon | manifest | Régénère l'icône de lancement Android (mipmaps + icône adaptative) depuis phpnitro.yml's icon/icon_background |
payments | manifest | Liste les moyens de paiement déclarés dans phpnitro.yml et leur statut de configuration dans .env (sans jamais afficher les clés) |
maps | manifest | Liste les fournisseurs de cartes déclarés et leur statut de configuration (OpenStreetMap toujours disponible sans clé) |
firebase | manifest | Liste la configuration Firebase déclarée (compte de service, project ID, clé API web) et son statut dans .env |
docs:api | manifest | Génère docs/api/*.md depuis les docblocks/signatures réels de chaque classe publique des packages du framework (jamais à éditer à la main) |
doctor | diagnostic | Vérifie l'état de la machine locale (PHP/extensions/Composer requis ; Java/Gradle/SDK/adb optionnels) — n'installe rien, contrairement à build:android |
Packages Composer phpnitro/* les plus courants
Publiés sur Packagist, résolus dans vendor/ comme n'importe quelle dépendance — pas copiés dans ton projet par phpx new. Seul phpnitro/ui est dans le composer.json généré par défaut (le moteur de rendu natif, la seule chose qu'un projet vierge a forcément besoin) ; les 5 ci-dessous — parmi une vingtaine d'autres packages au total (paiements, auth sociale, Supabase, géocodage, UUID, JWT...) — s'ajoutent avec un composer require phpnitro/<nom> classique dès que ton app en a besoin. Voir le catalogue complet.
| Package | Namespace | Rôle |
|---|---|---|
phpnitro/ui | Engine\Native\*, Engine\Color | Le moteur de rendu natif : Widget (contrat layout/paint), ~50 nœuds natifs (Scaffold, Flex, Button, LazyList...), Constraints/Size (le BoxConstraints de Flutter), Tokens (échelle de design), MediaQuery (taille d'écran courante), Canvas (sérialisation des commandes de dessin en JSON) |
phpnitro/database | Engine\Database\Database | Fabrique de connexion Doctrine DBAL : SQLite local par défaut, MySQL/PostgreSQL via DATABASE_URL sans changement de code ; reconnexion automatique si la connexion a été coupée |
phpnitro/firebase | Engine\Firebase\* | FirebaseAuth (connexion/inscription des utilisateurs finaux via l'API REST Identity Toolkit, clé web API client-safe) ; FirebaseMessaging (envoi de push FCM v1, nécessite un compte de service — à exécuter depuis ton propre serveur, jamais depuis le PHP embarqué) ; Firestore (client REST minimal get/set) ; GoogleServiceAccount |
phpnitro/countries | Engine\Countries\* | Données pays/villes hors-ligne (194 États membres/indépendants de l'ONU) — tableaux PHP purs, aucun appel réseau, aucune clé API |
phpnitro/preferences | Engine\Preferences\Preferences | Stockage clé-valeur persistant entre redémarrages, valeurs JSON-encodées, adossé à Database::connection() (SQLite par défaut) — l'équivalent de shared_preferences en Flutter, sans bridge natif par plateforme |
phpnitro/format | Engine\Format\Format | Formatage nombre/devise/date sans dépendre de ext-intl (non garanti dans le binaire PHP cross-compilé pour Android) — PHP pur, aucune donnée ICU |
Structure d'un projet scaffoldé
mon-app/
composer.json un seul, à la racine — un seul vendor/ pour tout le projet
phpnitro.yml manifeste de l'app (nom, version, paiements, cartes, Firebase, icône)
.env config partagée (APP_NAME synchronisé depuis phpnitro.yml, DATABASE_URL, clés API...)
public/
index.php front controller — dispatch vers Engine\App\{Écran}::build(), route
/native/layout-demo (le moteur de rendu natif) et /api/* (Backend\Kernel)
router.php utilisé par `phpx serve` (php -S ... router.php)
assets/ généré par phpx serve/bundle:android depuis assets/ à la racine (gitignored)
lib/
pages/ tes écrans natifs (Engine\App\*, implémentent Widget) — vide au
départ, une page par `phpx make:page`
backend/src/
Controller/ contrôleurs API (Backend\Controller\*)
Entity/ entités (Backend\Entity\*)
Repository/ repositories Doctrine DBAL (Backend\Repository\*)
Service/ logique métier partagée
Kernel.php dispatch match($path) vers les contrôleurs
android/
app/ coquille par-app (applicationId, res/, manifeste, config keystore)
settings.gradle.kts déclare le dépôt JitPack + com.github.phpnitro:android-engine
build.gradle.kts
ios/ moteur de rendu natif (Core Graphics) + protocole réseau — écrits
et testés en CI, PHP embarqué pas encore vérifié sur device
assets/ images, polices, audio — source de public/assets/
bin/ vide dans un projet scaffoldé ; phpx s'installe une fois, globalementTIP
Pas de packages/ ni de package.json dans un projet scaffoldé. Les packages du framework sont des dépendances Packagist ordinaires résolues dans vendor/ — la relation d'un projet à phpnitro/ui et consorts est celle d'un projet Flutter au SDK Flutter : référencée, jamais copiée comme code source. Il n'y a également aucun outillage Node : le framework n'a plus de dépendance JS depuis le retrait de l'ancien pipeline WebView/Tailwind.
phpx new --all — inclure aussi le desktop
Par défaut, phpx new ne scaffolde qu'Android et iOS (les deux cibles les plus abouties). phpx new --all ajoute aussi linux/, macos/ et windows/ — copiés tels quels (ces trois plateformes n'ont pas encore de mécanisme de paquet publié à référencer, contrairement à android-engine via JitPack), avec le même avertissement honnête que Desktop : macOS et Windows restent pre-alpha, sans app consommatrice réelle testée sur une vraie machine.
phpnitro.yml
| Clé | Description |
|---|---|
name | Nom affiché de l'app — synchronise .env's APP_NAME (via serve/bundle:android) et le label natif Android (strings.xml, via bundle:android) |
description, version | Métadonnées libres de l'app |
icon, icon_background | Chemin vers un PNG carré et couleur de fond hex — active la génération de l'icône de lancement Android (phpx icon, ou automatique via bundle:android) |
payments | Liste plate des gateways utilisés ([stripe, fedapay, paypal, razorpay, paydunya]) — chaque nom a une variable .env fixe définie une fois par le framework (STRIPE_PUBLIC_KEY/STRIPE_SECRET_KEY...), rien à redéclarer ici |
maps | Liste plate des fournisseurs ([mapbox], [google]...) — même principe, variable .env fixe (MAPBOX_ACCESS_TOKEN, GOOGLE_MAPS_API_KEY) ; openstreetmap ne nécessite aucune clé et n'a pas besoin d'entrée |
firebase | true/false — un seul projet Firebase possible par app. Variables .env fixes : FIREBASE_SERVICE_ACCOUNT_JSON (FCM + Firestore, jamais utilisée depuis le PHP embarqué sur l'appareil), FIREBASE_PROJECT_ID, FIREBASE_WEB_API_KEY (client-safe, utilisée par FirebaseAuth) |