PHPAML Framework
HTTP, routes, MVC, middlewares, injection, validation et sécurité avec un cycle de requête explicite.
Framework, View, Engine, Data et i18n restent utilisables séparément. Assemblez uniquement les capacités nécessaires à votre application, sans imposer toute la plateforme.
HTTP, routes, MVC, middlewares, injection, validation et sécurité avec un cycle de requête explicite.
Pages déclaratives, composants, layouts, état réactif, propriétés calculées et effets.
Événements, collections et navigation client sans rechargement complet ni JavaScript manuel.
Entités typées, requêtes, relations, migrations et transactions SQL ou MongoDB.
Catalogues JSON, paramètres, pluriels, résolution de langue et langues de secours.
final class MovieRoute extends Route
{
protected string $prefix = '/api/v1';
protected function routes(): void
{
$this->get('/movies', [MovieController::class, 'index']);
$this->get('/movies/{id}', [MovieController::class, 'show']);
}
}final class Counter extends Page
{
#[State] public int $count = 0;
public function body(): View
{
return VStack(
Heading('AML View')->size(42),
Text(StateRef::to('count', $this->count)),
Button('Add one')->onClick(
ClientAction::increment('count')
)
)->gap(16);
}
}#[Effect(
dependencies: ['query'],
debounce: 300,
concurrency: 'latest'
)]
protected function search(): EffectPlan
{
return Effects::run(
ClientAction::set('loading', true)
);
}
Button('Account')->onClick(
Navigate('/account')
);$users = $db->users()
->where('active', '=', true)
->orderBy('name')
->limit(20)
->all();
$db->transaction(function ($db) use ($lesson) {
$db->lessons()->add($lesson);
$db->saveChanges();
});aml install i18n
aml i18n:add fr
// src/locales/fr/navigation.json
{
"account": "Mon compte",
"lessons": "Mes leçons"
}
Text(__('navigation.account'));