Documentation officielle

Construire avec PHPAML.
Du premier projet à la production.

Guide complet de l’environnement autonome AML et du mini-framework MVC PHPAML.

13 chapitres30+ commandesEN / FR référence bilingue
01 — Démarrage

Trois parcours, un premier résultat en moins de cinq minutes

AML inclut PHP et Composer, crée la structure choisie et installe automatiquement ses dépendances. Choisissez l’application classique pour MVC, AML View pour une interface déclarative réactive, ou API pour un service JSON ciblé.

01 · APPLICATION CLASSIQUE
phpaml — zsh
aml create mon-projet
cd mon-projet
aml serve
02 · AML VIEW
phpaml — zsh
aml create-view-app mon-interface
cd mon-interface
aml serve
03 · API
phpaml — zsh
aml create-api mon-api
cd mon-api
aml serve

Ouvrez ensuite http://127.0.0.1:8910. Utilisez aml doctor si vous souhaitez vérifier l’environnement. Pour le dossier actuel, utilisez aml create ..

Installation automatique et actualisation

Les commandes de création préparent directement un projet exécutable. Le navigateur se recharge ensuite après chaque modification prise en charge.

02 — Concepts

Trois structures lisibles, une même configuration

PHPAML sépare les responsabilités sans imposer de dossiers inutiles. Le projet classique conserve app et sa carte de routes WebApp. AML View organise le backend et l’interface sous src. Une API retire les vues et adopte une classe de route par ressource.

APPLICATION CLASSIQUE
app/
├── Controllers/
├── Models/
└── views/
routes/WebApp.php
public/index.php
AML VIEW
src/
├── controllers/
├── models/
├── middleware/
├── locales/
└── views/
    ├── pages/
    ├── components/
    ├── layouts/
    ├── states/
    └── stylesheets/
routes/WebApp.php
API
src/
├── controllers/
├── models/
├── repositories/
├── requests/
├── resources/
├── middleware/
└── routes/
    └── MovieRoute.php
public/index.php

Configuration sans dossier configs

Dans les nouveaux projets, phpaml.json contient les choix partageables et .env les secrets ou valeurs propres à la machine. PHPAML construit runtime/config/app.php automatiquement. Ce dernier appartient au moteur et ne doit jamais être édité.

Cycle d’une requête

  1. public/index.php charge phpaml.json et .env.
  2. Les middlewares traitent la requête.
  3. Le routeur découvre routes/ ou src/routes/.
  4. Le conteneur injecte les dépendances du contrôleur.
  5. L’action retourne HTML, JSON ou une redirection.
02.1 — Migration

Passer de aml_env à runtime

Les projets plus anciens utilisent aml_env, info.json ou app/View. La migration renomme aussi app/View en app/UI. Prévisualisez toujours la conversion avant de l’appliquer. AML crée une sauvegarde dans runtime/storage/migrations avant de renommer les éléments et d’actualiser les références connues.

phpaml — zsh
aml migrate:structure
aml migrate:structure --apply --yes
aml doctor --offline
aml test
Sauvegarde automatique

runtime/storage/migrations/structure-<date>/

03 — CLI

Référence des commandes AML

Au premier lancement, AML demande English ou Français. Les sorties, diagnostics et erreurs suivent ce choix. AML_LANG=en ou AML_LANG=fr remplace temporairement la langue.

aml create .Créer dans le dossier courant
aml create mon-projetCréer une application classique
aml create-view-app mon-uiCréer une application AML View
aml create-api mon-apiCréer une API JSON ciblée
aml installInstaller moteur et dépendances
aml serveDémarrer à partir du port 8910 avec actualisation
aml routesAfficher les routes
aml testExécuter tests/run.php
aml buildCréer une archive de production vérifiée
aml deploy productionConstruire et déployer un profil configuré
aml deploy:rollback productionRestaurer la version précédente
aml make:controller UserGénérer un contrôleur
aml make:model UserGénérer un modèle
aml make:middleware AuthGénérer un middleware
aml make:migration create_users_tableGénérer une migration
aml env:initCréer .env depuis .env.example
aml env:listLister les variables et masquer secrets
aml env:get APP_DEBUGLire une variable
aml env:set APP_DEBUG falseCréer ou modifier une variable
aml db:showAfficher la configuration de la base
aml doctorVérifier AML et le projet
aml cache:clearVider le cache
aml update --checkChercher une nouvelle version
aml updateInstaller la dernière version
aml language enChanger la langue du CLI

Options utiles

phpaml — zsh
aml create projet --version 0.1.0
aml create projet --offline
aml install --production
aml install --refresh
aml doctor --offline
aml doctor --port 8080
aml doctor --production --json
aml update --version 1.3.0
04 — HTTP & MVC

Routes, requêtes et contrôleurs

phpaml — zsh
'GET /users/{id}' => [
    'handler' => [UserController::class, 'show'],
    'middleware' => [AuthMiddleware::class],
    'name' => 'users.show',
],
phpaml — zsh
public function show(Request $request): Response
{
    return $this->json(['id' => $request->attribute('id')]);
}

Request fournit method(), path(), query(), input(), cookie(), header(), server() et attribute(). Le JSON est décodé automatiquement. Une route inconnue retourne 404 ; une mauvaise méthode retourne 405.

phpaml — zsh
return Response::html('<h1>Hello</h1>');
return Response::json(['ok' => true], 201);
return Response::redirect('/login');
return $this->view('users/show.php', ['user' => $user]);
05 — UI

Vues déclaratives et ressources

Les applications classiques peuvent conserver leurs templates PHP et partials. Une application AML View place ses pages, composants, layouts et états dans src/views. Les feuilles de style sont découvertes automatiquement dans src/views/stylesheets, tandis que le moteur JavaScript est servi automatiquement par AML.

phpaml — zsh
src/views/pages/home/page.php
src/views/components/Navigation.php
src/views/layouts/DashboardLayout.php
src/views/stylesheets/pages/home.css
assets/images/hero.webp
public/favicon.svg
06 — ENV

Configurer .env en ligne de commande

phpaml — zsh
aml env:init
aml env:set APP_DEBUG false
aml env:get APP_DEBUG
aml env:list

env:init copie .env.example ; --force remplace un fichier existant. env:list masque mots de passe, secrets, clés et jetons. Ne publiez jamais .env dans Git.

07 — Data

SQLite, MySQL et migrations

SQLite est la base locale par défaut. AML crée runtime/storage/database.sqlite et enregistre root/root par convention ; SQLite n’utilise pas réellement ces identifiants.

phpaml — zsh
aml db:configure sqlite
aml db:configure sqlite --path storage/app.sqlite
aml db:show

aml db:configure mysql --host 127.0.0.1 --port 3306 \
  --database phpaml --user root --password root

Migrations transactionnelles

phpaml — zsh
aml make:migration create_users_table
aml migrate
aml migrate:rollback --steps 1

Les migrations sont enregistrées dans aml_migrations. Les migrations sont ordonnées et verrouillées. migrate:rollback exécute down() en ordre inverse. Le QueryBuilder fournit all() et insert() ; utilisez PDO préparé pour le reste.

08 — Security

Validation, CSRF et middleware

phpaml — zsh
$valid = $validator->validate($request->input(), [
  'email' => ['required', 'email'],
  'name' => ['required', 'string', 'min:2', 'max:100'],
]);

Règles : required, email, string, min:n et max:n. Protégez les routes d’écriture avec CsrfMiddleware et ajoutez <?= $this->csrfField() ?> aux formulaires. Pour une API, utilisez X-CSRF-Token.

SecurityHeadersMiddleware ajoute les en-têtes de sécurité ; les détails d’erreur sont masqués avec APP_DEBUG=false.

09 — Shipping

Tester et préparer la production

phpaml — zsh
aml test
aml install --production
aml doctor --production --json
aml routes

aml test utilise le PHP privé d’AML et exécute tests/run.php. --production exclut les dépendances de développement et optimise l’autoloader.

Important

aml serve est réservé au développement. En production : serveur HTTP compatible PHP, HTTPS, APP_DEBUG=false, permissions minimales, sauvegardes et authentification adaptée.

10 — Support

Résoudre les problèmes fréquents

La commande aml est introuvable

Ouvrez un nouveau terminal et vérifiez PATH : %LOCALAPPDATA%\Programs\PHPAML\bin sous Windows, /usr/local/bin sous macOS/Linux.

L’environnement AML est absent

Depuis la racine du projet, lancez aml install.

CSS ou JavaScript ne se charge pas

Vérifiez /public/, les majuscules du fichier et lancez aml serve depuis le dossier contenant public/index.php.

Le port 8000 est occupé

aml doctor --port 8080
aml serve 127.0.0.1:8080

GitHub est inaccessible

Utilisez aml create projet --offline ou aml install --offline pour réutiliser le cache.

11 — SEO

Piloter le SEO depuis AML

AML centralise les métadonnées, génère les fichiers destinés aux moteurs de recherche et audite le HTML publié.

phpaml — zsh
aml seo:init
aml seo:set base_url "https://example.com"
aml seo:set title "My website"
aml seo:set description "A clear description between 50 and 160 characters."
aml seo:disallow /admin
aml seo:allow /admin/public
aml seo:generate
aml seo:audit https://example.com --json

seo:generate crée public/sitemap.xml et public/robots.txt depuis les routes GET statiques. Les routes interdites sont retirées du sitemap. seo:audit vérifie le titre, la description, l’URL canonique, Open Graph, Twitter Cards, JSON-LD, la langue, le viewport, le H1, les images et HTTPS.

Indexation et sécurité

Une règle disallow guide les robots, mais ne protège pas une page. Utilisez l’authentification et les middlewares pour les zones privées.

12 — Deploy

Construire et déployer partout

aml build exécute les tests, vérifie public/.htaccess et crée une archive ZIP, un manifeste et un checksum SHA-256 dans output/. Les secrets et éléments non exécutables sont exclus : .env, journaux, bases SQLite, tests, fichiers temporaires, output/ et deliverables/.

phpaml — zsh
aml build
aml build --skip-tests

aml deploy:configure production --host example.com --user deploy \
  --path /home/deploy/site --port 22 --key ~/.ssh/id_ed25519
aml deploy:check production
aml deploy production
aml deploy:rollback production

Choisir une stratégie

releasesVersions horodatées, lien current et retour arrière atomique
public-htmlHébergement mutualisé avec public_html séparé
sftp-onlyServeur sans accès shell SSH
phpaml — zsh
aml deploy:configure hostinger --host example.com --user deploy \
  --path /home/user/domains/example.com \
  --strategy public-html \
  --public-path /home/user/domains/example.com/public_html \
  --key ~/.ssh/id_ed25519

Le profil privé est conservé dans ~/.phpaml/deploy.json avec des permissions 600. AML n’enregistre aucun mot de passe : utilisez une clé SSH. Le domaine doit pointer vers public/ ou, avec public-html, vers le chemin public configuré. Les visiteurs obtiennent /about, jamais /index.php/about.

Build interrompu ou erreur 503

AML supprime les archives incomplètes si le disque ou output/ n’est pas accessible. Les erreurs GitHub temporaires sont retentées trois fois automatiquement.

Prêt à construire votre première application ?Installer AML
02.2 — PACKAGIST

Installer les composants indépendamment

Les commandes de création AML configurent automatiquement les bons composants. Dans un projet Composer existant, déclarez ensemble les paquets en préversion qui collaborent afin que le projet racine autorise explicitement leur niveau de stabilité.

AML VIEW + ENGINE
phpaml — zsh
composer require \
  phpaml/view:^0.1@beta \
  phpaml/engine:^0.1@beta
DATA + MONGODB
phpaml — zsh
composer require \
  phpaml/data:^0.2@alpha \
  phpaml/data-mongodb:^0.1@alpha

Engine, Data et i18n peuvent aussi être installés seuls. L’adaptateur MongoDB nécessite l’extension PHP mongodb, tandis que Data SQL nécessite PDO.

13 — AML View

Construire une interface déclarative et réactive

AML View est la couche frontend optionnelle de PHPAML. PHP rend le premier document, puis Engine gère localement l’état, les effets, les collections, les thèmes et la navigation.

phpaml — zsh
aml create-view-app mon-interface
cd mon-interface
aml serve
# http://127.0.0.1:8910
src/
├── controllers/
├── models/
├── middleware/
└── views/
    ├── pages/{route}/page.php
    ├── components/
    ├── layouts/
    ├── states/{Loading,Error,NotFound}.php
    ├── stylesheets/
    ├── themes/
    └── assets/

src/views, src/controllers et src/models sont obligatoires. Les CSS sont collectés depuis src/views/stylesheets. Les ressources importées restent dans assets ; favicon, robots.txt et sitemap.xml restent dans public/.

phpaml — zsh
#[State]
public int $count = 0;

public function body(): View
{
    return VStack(
        Heading('AML View')->class('page-title'),
        Text("Count: {$this->count}"),
        Button('Add one')->onClick(fn () => $this->count++),
    );
}

Les interactions compilées s’exécutent dans le navigateur sans rappeler PHP. Les effets offrent dépendances, nettoyage, debounce, throttle, annulation latest, états loading/success/error et protection contre les cycles.

Navigation sans rechargement

Engine remplace uniquement la zone RouterView, conserve le document, met à jour l’historique, les métadonnées et le focus, puis utilise Loading, Error ou NotFound selon la réponse.

14 — i18n

Internationalisation JSON

phpaml — zsh
aml install i18n
aml i18n:add es
aml i18n:list
aml i18n:check
aml i18n:missing fr
aml i18n:set-default en

Organisez librement les fichiers sous src/locales/{langue}. Le chemin devient une clé pointée, les paramètres utilisent :nom, les pluriels one/other utilisent le nombre et LocaleResolver choisit une langue supportée depuis la route, le cookie ou Accept-Language.