Skip to content

Référence ​

Commandes phpx ​

CommandeTypeDescription
new <répertoire>projetScaffolde 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]projetGénère une page + un contrôleur backend jumeau, enregistre les deux routes (écran et /api/...)
make:entity <Nom>projetGénère une entité + un repository jumeau (schéma SQLite auto-créé, find()/save())
serve [port]projetSert public/ (défaut : 8090) — synchronise assets/ et .env's APP_NAME avant de lancer php -S
bundle:androidandroidCopie (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]androidbundle:android puis gradle :app:assemble... — installe Gradle/le SDK Android automatiquement si absents
dev:push [--watch]androidPousse 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é
iconmanifestRégénère l'icône de lancement Android (mipmaps + icône adaptative) depuis phpnitro.yml's icon/icon_background
paymentsmanifestListe les moyens de paiement déclarés dans phpnitro.yml et leur statut de configuration dans .env (sans jamais afficher les clés)
mapsmanifestListe les fournisseurs de cartes déclarés et leur statut de configuration (OpenStreetMap toujours disponible sans clé)
firebasemanifestListe la configuration Firebase déclarée (compte de service, project ID, clé API web) et son statut dans .env
docs:apimanifestGénère docs/api/*.md depuis les docblocks/signatures réels de chaque classe publique des packages du framework (jamais à éditer à la main)
doctordiagnosticVé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.

PackageNamespaceRôle
phpnitro/uiEngine\Native\*, Engine\ColorLe 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/databaseEngine\Database\DatabaseFabrique 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/firebaseEngine\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/countriesEngine\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/preferencesEngine\Preferences\PreferencesStockage 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/formatEngine\Format\FormatFormatage 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, globalement

TIP

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
nameNom affiché de l'app — synchronise .env's APP_NAME (via serve/bundle:android) et le label natif Android (strings.xml, via bundle:android)
description, versionMétadonnées libres de l'app
icon, icon_backgroundChemin 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)
paymentsListe 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
mapsListe 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
firebasetrue/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)

PhpNitro est un produit FINANFA TECH — Publié sous licence MIT.