Download the PHP package astral-php/astral without Composer

On this page you can find all versions of the php package astral-php/astral. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package astral

Astral MVC — Framework PHP 8.1+ minimaliste

PHP

Micro-framework MVC orienté objet, compatible PHP 8.1 → 8.5. Dépendances de production : vlucas/phpdotenv, phpmailer/phpmailer. Minimaliste par design, puissant par convention.

Prérequis : PHP ≥ 8.1 (recommandé : 8.2+ / 8.3+ / 8.4 / 8.5).


Écosystème Composer

Trois familles (détail : astral.md) :

Famille Commande Exemples
Application composer create-project astral-php/astral ; futur astral-blog, astral-shop
Core dépendance Composer astral-php/astral-core 1.2.3
Composant composer require form, vite, utilities, template, auth-extra…

Composants optionnels

Package Rôle Statut
astral-php/astral-form Formulaires (FormBuilder, erreurs Validator, variable $form dans les vues) Packagist · GitHub
astral-php/astral-vite Assets Vite + Tailwind, $vite->tags() dans le layout Packagist · GitHub
astral-php/astral-utilities Helpers Str / Date / Arr (zéro dépendance) Packagist · GitHub
astral-php/astral-template Layouts Tailwind admin / marketing + partials UI Packagist · GitHub
astral-php/astral-auth-extra Throttling login, remember-me, journal des tentatives Packagist · GitHub
astral-php/astral-extend-orm Modèles enrichis (fillable, casts, accessors, relations) En cours (remaniement) → 1.3
astral-php/astral-payment Paiements Stripe (checkout, webhooks) En cours (repackaging) → 1.3

Applications

Package Rôle Statut
astral-php/astral Starter MVC ✅ 1.2.3 (require astral-core)
astral-php/astral-blog Blog / CMS clé en main MVP local 0.3 — create-project après astral-core 1.2.3

Puis enregistrer le ServiceProvider du package dans config/dependencies.php (voir le README de chaque dépôt).

Roadmap : 1.2.3 = extraction astral-core ; ensuite blog en application, puis extend-orm / payment.
Le core 2.x (enums, readonly, PHP 8.2+) est un chantier séparé.

Organisation : Packagist astral-php · GitHub astral-php.


Structure


Installation

Prérequis : PHP 8.1 ou supérieur (8.1 → 8.5).

Via Composer (recommandé)

Crée un projet à partir de la branche 1.2.x (actuelle : 1.2.3) :

Pour figer exactement la 1.2.3 :

Dépend de astral-php/astral-core ^1.2.

Depuis un clone Git

Vérifiez notamment APP_DEBUG=true en développement (pages d'erreur détaillées + dump()).

Démarrage rapide (Laragon / Apache)

  1. Créer le projet (create-project ou clone) dans laragon/www/ (ex. mon-projet)
  2. Accéder à http://mon-projet.test ou http://localhost/mon-projet
  3. La base SQLite et le dossier storage/logs/ sont créés automatiquement

Démarrer un projet from scratch

Astral MVC est livré avec un module d'exemple complet (Article / Category) qui démontre les ORM léger (hasMany, belongsTo), l'API REST JSON et les migrations.

Si vous souhaitez repartir d'une base vierge pour construire votre propre application, supprimez les fichiers suivants :

1. Modèles et DAOs d'exemple

2. Contrôleurs API d'exemple

3. Migrations d'exemple

4. Nettoyer AppServiceProvider

Dans app/Providers/AppServiceProvider.php, retirez :

5. Nettoyer config/routes.php

Retirez le groupe /api/v1 et ses imports :

Note : Les middlewares CorsMiddleware et BearerTokenMiddleware, ainsi que la classe ApiResponse et AbstractApiController, font partie du framework (astral-php/astral-core) — vous pouvez les réutiliser pour vos propres modules API sans les supprimer.


Variables d'environnement (.env)

Copiez .env.example en .env et adaptez les valeurs. Le fichier .env ne doit jamais être versionné (déjà dans .gitignore).

Les fichiers config/app.php et config/database.php lisent $_ENV avec des valeurs de fallback. En production, les variables peuvent aussi être injectées directement par le serveur (.env non requis).


Architecture du démarrage

Fichier à modifier Quand
app/Providers/AppServiceProvider.php Ajouter un DAO ou un contrôleur
config/dependencies.php Ajouter / retirer un Service Provider
config/routes.php Ajouter / modifier / supprimer une route
config/app.php Changer l'environnement, le debug, la timezone
config/database.php Changer de driver ou de base de données

public/index.php n'est jamais modifié par l'application. Les providers cœur (FrameworkServiceProvider) ne le sont que pour étendre le framework lui-même.


Fonctionnalités

Debug & erreurs (ErrorHandler, dump, dd)

Zéro dépendance. Activé automatiquement au démarrage.

Situation Comportement
NotFoundException Page 404 (HTML) — pas de log
AuthorizationException / CsrfException Page 403 (CSRF logué en warning)
Autre Throwable Log ERROR + page 500
Erreurs PHP / fatals Converties / capturées → 500
Routes /api/* Réponses JSON (ApiResponse) — hors rendu HTML

Avec APP_DEBUG=true, la page 500 affiche classe, message, fichier et stack trace. Avec APP_DEBUG=false, message générique uniquement (aucun détail technique exposé).

Session & Messages flash


Validation

Règles disponibles :

Règle Description
required Champ non vide
min:N Longueur ≥ N (chaîne) ou valeur ≥ N (nombre)
max:N Longueur ≤ N (chaîne) ou valeur ≤ N (nombre)
email Adresse e-mail valide
integer Entier
numeric Valeur numérique
alpha Lettres uniquement
url URL valide
confirmed Doit correspondre au champ {field}_confirmation
in:a,b,c Valeur parmi la liste

Protection CSRF

Le token est partagé automatiquement dans toutes les vues via $csrf.

La vérification se fait via CsrfMiddleware à appliquer aux routes concernées :


Partials (vues réutilisables)

Le moteur de vues expose renderPartial() et un alias court partial() pour inclure des sous-vues (sans layout). La variable $viewEngine est partagée dans toutes les vues et le layout (nom dédié pour éviter tout conflit avec une donnée view), ce qui permet d’inclure des partials depuis n’importe quel template.

Convention : placer les partials dans views/partials/ (ex. partials/flash.php, partials/field-error.php).

Depuis une vue ou le layout :

Partials fournis (Tailwind CSS) :

Partial Rôle Variables
partials/flash Messages flash success/error $session (partagée)
partials/validation-errors Liste globale d’erreurs de validation $errors (optionnel)
partials/field-error Message d’erreur sous un champ $field, $errors
partials/pagination Liens Précédent / numéros / Suivant $current, $pages, $baseUrl, $mode (optionnel)

Pagination — 3 modes ($mode optionnel, défaut numbers) : simple (Précédent / Suivant), numbers (toutes les pages), elastic (fenêtre glissante 1 … 5 6 7 … 42 pour gros volumes).

En contrôleur, $this->view->renderPartial('nom/vue', $data) retourne le HTML sans layout (utile pour des réponses AJAX ou fragments). Dans les vues, utilisez toujours $viewEngine->partial(...) pour inclure un partial.


Middleware

Créer un middleware dans app/Middleware/ :

Enregistrer dans config/dependencies.php :

Appliquer dans config/routes.php :


Routes — verbes HTTP complets & groupes


Logger

Les erreurs 500 sont loguées automatiquement dans storage/logs/YYYY-MM-DD.log.

Format d'une ligne de log :


Pagination


Objet Response (actions testables)

Les méthodes render(), redirect() et json() retournent désormais des objets Response. L'envoi HTTP n'est déclenché qu'à la fin par le Router, ce qui permet de tester les contrôleurs sans sortie réelle.


Cache fichier


Console CLI

Ajouter une commande applicative :


Service Providers

config/dependencies.php déclare un tableau de providers — plus de Closure plate. Application instancie chaque provider et appelle register() dans l'ordre du tableau.

Ajouter un groupe de services (ex: envoi d'e-mails) :

Les providers du framework (astral-core → Core\Providers\) ne sont jamais modifiés. Vos ajouts se font exclusivement dans app/Providers/.


JSON / API REST


Basculer vers MySQL

Éditer .env (recommandé) :


Relations entre entités — ORM léger

Philosophie Astral : pas de lazy-loading, pas de magie. Les relations sont des appels explicites dans les DAOs.

AbstractDao expose deux helpers protected que les DAOs concrets peuvent appeler :

hasMany() — relation 1→N

belongsTo() — relation N→1

Chargement combiné

Les DAOs exposent des méthodes de "chargement avec relation" pour éviter de multiples appels :

Exemple complet : module Article

Règles et conventions

Règle Raison
Pas de lazy-loading Rend les requêtes visibles et prévisibles
Méthodes nommées <entité>Of($parent) Ex: articlesOf($categoryId), categoryOf($article)
belongsTo retourne null si foreignId = 0 Sécurité si la clé étrangère est nulle
findWith*() pour chargement combiné Pratique pour les contrôleurs

Migrations fournies


Authentification & Rôles

Le premier compte créé via /register devient automatiquement admin.
Ensuite, l’admin paramètre l’inscription des utilisateurs suivants dans le .env :

Rôles disponibles

Service Auth

Disponible dans tous les contrôleurs via le conteneur, et dans toutes les vues via la variable $auth partagée automatiquement.

Middleware Auth

Trois middleware intégrés, utilisables dans config/routes.php :

Middleware Comportement
AuthMiddleware Redirige vers /login si non connecté
AdminMiddleware Redirige vers /login si non connecté ; lève AuthorizationException (403) si non admin
GuestMiddleware Redirige vers / si déjà connecté (pour /login, /register)

Gestion des rôles dans UserDao

Interface d'administration des rôles

L'application embarque une interface dédiée accessible aux administrateurs :

Méthode URI Action Middleware
GET /admin/users Tableau de bord des rôles AdminMiddleware
POST /admin/users/:id/role Changer le rôle d'un utilisateur AdminMiddleware

Contrôleur : App\Controllers\Admin\UserController

Règles de sécurité intégrées :

Événement dispatché après chaque changement :

Listener fourni : App\Listeners\LogRoleChange — journalise l'action via Logger.

Modèle User — helpers de rôle

Routes d'authentification (incluses par défaut)

Méthode URI Action Middleware
GET /login Formulaire de connexion GuestMiddleware
POST /login Traitement de connexion GuestMiddleware
POST /logout Déconnexion —
GET /register Formulaire d'inscription GuestMiddleware
POST /register Traitement d'inscription GuestMiddleware

Routes disponibles (application de démonstration)

Méthode URI Action Middleware
GET / Page d'accueil —
GET /login Formulaire de connexion GuestMiddleware
POST /login Traitement connexion GuestMiddleware
POST /logout Déconnexion —
GET /register Formulaire d'inscription GuestMiddleware
POST /register Inscription GuestMiddleware
GET /users Liste des utilisateurs AuthMiddleware
GET /users/create Formulaire de création AuthMiddleware
GET /users/:id Fiche d'un utilisateur AuthMiddleware
POST /users Créer un utilisateur AuthMiddleware
POST /users/:id/delete Supprimer un utilisateur AuthMiddleware

Tests

Couverture actuelle :

Fichier Ce qui est testé
tests/Core/ValidatorTest.php 10 règles de validation, combinaisons, errors()/first()
tests/Core/ContainerTest.php bind, singleton, instance, has, make, autowiring
tests/Core/RequestTest.php Méthode HTTP, verb spoofing, URI, input()/query()/header()
tests/Core/SessionTest.php get/set/has/forget, flash messages, pullAllFlashes
tests/Core/CacheTest.php get/set/has/forget/flush, remember(), expiration TTL
tests/Core/Http/ResponseTest.php Response, JsonResponse, RedirectResponse
tests/Core/EventDispatcherTest.php listen, dispatch, subscribe, hasListeners, ordre, exceptions
tests/Core/RouterTest.php Route statique, route non trouvée
tests/Database/AbstractDaoTest.php Insert, findAll, update, delete, authenticate
tests/Database/MigratorTest.php run, rollback, status, batches, orphan detection

Events & Listeners

Le système d'événements découple les effets de bord des contrôleurs. EventDispatcher est synchrone et zéro dépendance.

Créer un événement

Créer un listener

Enregistrer dans AppServiceProvider

Dispatcher depuis un contrôleur

Subscriber (regroupement de listeners)

Événements fournis

Événement Déclenché par Listeners actifs
UserRegistered AuthController::register() SendWelcomeEmail, LogUserActivity
UserLoggedIn AuthController::login() LogUserActivity

Migrations de base de données

Le système de migrations versionne le schéma de base de données via des fichiers PHP dans database/migrations/. Chaque migration est un batch identifié en base dans la table migrations (créée automatiquement, SQLite et MySQL compatibles).

Convention de nommage

Commandes

Anatomie d'un fichier de migration

Résultat de migrate:status

Statut Signification
applied Migration exécutée en base
pending Fichier présent, pas encore appliqué
orphan Enregistrement en base mais fichier supprimé

API REST JSON

Astral embarque une couche API complète, activée via des routes /api/v1/* protégées par CORS et Bearer Token.

Format de réponse uniforme

Configuration

Dans .env :

Appels depuis un client

Routes disponibles

Méthode URI Action
GET /api/v1/articles Liste paginée (?page=N&status=published)
GET /api/v1/articles/:id Détail + catégorie liée
POST /api/v1/articles Créer (JSON body)
PUT /api/v1/articles/:id Modifier (JSON body partiel)
DELETE /api/v1/articles/:id Supprimer → 204
GET /api/v1/categories Liste toutes les catégories
GET /api/v1/categories/:id Détail (?with_articles=1)

Créer un contrôleur API

Middlewares

Middleware Rôle
CorsMiddleware En-têtes Access-Control-*, gestion des requêtes OPTIONS preflight
BearerTokenMiddleware Vérifie Authorization: Bearer <token> vs API_KEY

Scaffolding — Générateur de code

Le générateur crée automatiquement le squelette d'un module complet (Model, DAO, Controller, Migration).

Mode interactif (recommandé)

Le prompt guide étape par étape :

Mode direct

Ce que génère chaque commande

Commande Fichier généré Description
make:model Article app/Models/Article.php Modèle anémique avec propriétés typées
make:dao Article app/Dao/ArticleDao.php DAO héritant d'AbstractDao, table auto-détectée
make:controller Article --resource app/Controllers/ArticleController.php 7 actions CRUD (index, show, create, store, edit, update, destroy)
make:controller Article --api app/Controllers/ArticleController.php 5 actions JSON avec validation et codes HTTP
make:migration create_articles_table database/migrations/…php Migration SQLite + MySQL

Après la génération — étapes manuelles

public/index.php et Core\Application (package astral-core) ne sont jamais modifiés.


Fonctionnalités PHP 8.1+ utilisées


All versions of astral with dependencies

PHP Build Version
Package Version
Requires php Version ^8.1
astral-php/astral-core Version ^1.2.4
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package astral-php/astral contains the following files

Loading the files please wait ...