Cycle de vie Grav
Il est souvent utile de savoir comment Grav traite afin de bien comprendre comment étendre au mieux Grav via des plugins. Voici le cycle de vie Grav :
index.php
- Vérifiez la version de PHP afin d'exécuter au moins la version 7.1.3
- Initialisation du chargeur de classe
- Obtenir l'instance Grav
Grav.php
- Aucune instance n'existe, donc appelez
load()
- Ajouter
loader
- Ajouter et initialiser
debugger
- Ajouter
grav (obsolète)
- Enregistrer les services par défaut
- Enregistrer les fournisseurs de services
- Fournisseur de services de comptes
- Ajouter
permissions
(1.7) - Ajouter
accounts
(1.6) - Ajouter
user_groups
(1.7) - Ajouter
users
(obsolète)
- Ajouter
- Fournisseur de services d'actifs
- Ajouter
assets
- Ajouter
- Fournisseur de services de sauvegardes
- Ajouter
backups
(1.6)
- Ajouter
- Fournisseur de services de configuration
- Ajouter
setup
- Ajouter
blueprints
- Ajouter
config
- Ajouter
langueges
- Ajouter
language
- Ajouter
- Fournisseur de services d'erreur
- Ajouter
error
- Ajouter
- Fournisseur de services de système de fichiers
- Ajouter
filesystem
- Ajouter
- Fournisseur de services flexibles
- Ajouter
flex
(1.7)
- Ajouter
- Fournisseur de services d'inflecteur
- Ajouter
inflector
- Ajouter
- Fournisseur de services d'enregistrement
- Ajouter
log
- Ajouter
- Fournisseur de services de sortie
- Ajouter
output
- Ajouter
- Fournisseur de services de pages
- Ajouter
pages
- Ajouter
page
- Ajouter
- Demander un fournisseur de services
- Ajouter
request
(1.7)
- Ajouter
- Fournisseur de services de planification
- Ajouter
scheduler
(1.6)
- Ajouter
- Fournisseur de services de session
- Ajouter
session
- Ajouter
messages
- Ajouter
- Fournisseur de services de flux
- Ajouter
locator
- Ajouter
actor
- Ajouter
- Fournisseur de services de tâches
- Ajouter
task
- Ajouter
action
- Ajouter
- Fournisseurs de services simples
- Ajouter
browser
- Ajouter
cache
- Ajouter
events
- Ajouter
exif
- Ajouter
plugins
- Ajouter
taxonomy
- Ajouter
themes
- Ajouter
twig
- Ajouter
uri
- Ajouter
- Fournisseur de services de comptes
- Aucune instance n'existe, donc appelez
- appeler Grav::process()
Grav.php
- Exécutez l'initialisation du processeur
- Configuration
- Initialiser
$grav['config']
- Initialiser
$grav['plugins']
- Initialiser
- Enregistreur
- Initialiser
$grav['log']
- Initialiser
- Erreurs
- Initialiser
$grav['errors']
- Enregistre les gestionnaires d'erreurs PHP
- Initialiser
- Débogueur
- Initialiser
$grav['debugger']
- Initialiser
- Gérer les requêtes du débogueur
- Démarrer la mise en mémoire tampon de sortie
- Localisation
- Définir les paramètres régionaux et le fuseau horaire
- Plugins
- Initialiser
$grav['plugins']
- Initialiser
- pages
- Initialiser
$grav['pages']
- Initialiser
- Uri
- Initialiser
$grav['uri']
- Ajouter
$grav['base_url_absolute']
- Ajouter
$grav['base_url_relative']
- Ajouter
$grav['base_url']
- Initialiser
- Gérer la redirection
- Rediriger si
system.pages.redirect_trailing_slash
esttrue
et la barre oblique finale dans l'URL
- Rediriger si
- Comptes
- Initialiser
$grav['accounts']
- Initialiser
- Session
- Initialiser
$grav['session']
sisystem.session.initialize
esttrue
- Initialiser
- Configuration
- Exécuter le processeur de plugins
- Événement Fire onPluginsInitialized
- Exécuter le processeur de thèmes
- Initialiser
$grav['themes']
- vénement Fire onThemeInitialized
- Initialiser
- Exécuter le processeur de requêtes
- Initialiser
$grav['request']
- Lancer l'événement onRequestHandlerInit avec [request, handler]
- Si la réponse est définie à l'intérieur de l'événement, arrêter le traitement ultérieur et générer la réponse
- Initialiser
- Exécuter le processeur de tâches
- Si la demande a l'attribut controller.class et une tâche ou une action :
- Exécutez le contrôleur
- Si
NotFoundException
: continuer (vérifier la tâche et l'action) - Si code de réponse 418 : continuer (ignorer la tâche et l'action)
- Sinon : arrêter le traitement ultérieur et générer la réponse
- Si task :
- Événement Fire onTask
- Evénement Fire onTask.[TASK]/li>
- Si action :
- Événement Fire onAction
- Evénement Fire onAction.[ACTION]
- Exécuter le processeur de sauvegardes
- Initialiser
$grav['backups']
- Événement Fire onBackupsInitialized
- Initialiser
- Exécuter le processeur du planificateur
- Initialiser
$grav['scheduler']
- Événement Fire onSchedulerInitialized
- Initialiser
- Exécuter le processeur d'actifs
- Initialiser
$grav['assets']
- Événement Fire onAssetsInitialized
- Initialiser
- Exécuter le processeur Twig
- Initialiser
$grav['twig']
- Définir les chemins du modèle Twig en fonction de la configuration
- Gérer les modèles de langue si disponibles
- Événement Fire onTwigTemplatePaths</li>
- Événement Fire onTwigLoader
- Charger la configuration Twig et la chaîne du chargeur
- Événement Fire onTwigInitialized
- Charger les extensions Twig
- Événement Fire onTwigExtensions
- Définissez des variables Twig standard (config, uri, taxonomy, actifs, navigateur, etc.)
- Exécuter le processeur de pages
- Initialiser
$grav['pages']
Pages.php
- Appelez
buildPages()
- (la logique diffère quelque peu pour les Flex Pages, mais l'idée est la même))
- Vérifiez si le cache est bon)
- Si le cache est bon, les pages de chargement datent de
- Si le cache n'est pas bon, appelez
recurse())
- Lancer l'événement onBuildPagesInitialized dans
recurse())
- Si un fichier
.md
est trouvé :
Pages.php
- Appelez
init()
pour charger les détails du fichier - Définissez le
filePath
,modified
,id
- Appelez
header()
pour initialiser les variables d'en-tête - Appelez
slug()
pour définir le slug d'URL - Appelez
visible()
pour définir l'état visible - Définissez le statut de
modularTwig()
en fonction du fait que le dossier commence par _
- Appelez
- Événement Fire onPageProcessed
- Si un
folder
est trouverecurse()
les enfants - Événement Fire onFolderProcessed
- Appelez
buildRoutes()
- Initialiser la
taxonomy
pour toutes les pages - Créer une table
route
pour une recherche rapide
- Appelez
- Événement Fire onPagesInitialized avec [pages]
- Lancer l'événement onPageInitialized avec [page]
- Si la page n'est pas routable :
- Lancer l'événement onPageNotFount avec [page]
- Si tâche :
- Lancer l'événement onPageTask avec [task, page]/LI>
- Lancer l'événement onPageTask.[TASK] avec [task, page]
- Si action :
- Lancer l'événement onPageAction avec [action, page]
- Lancer l'événement onPageAction.[ACTION] avec [action, page]
- Exécuter le processeur d'actifs du débogueur
- Barre de débogage uniquement : ajoutez le débogueur CSS/JS aux ressources
- Exécuter le processeur de rendu
- Initialiser $grav['sortie']
- Si instance de sortie de ResponseInterface :
- Arrêter le traitement ultérieur et générer la réponse
- Sinon:
- Rendre la page avec la méthode processSite() de Twig
Twig.php
- Événement Fire onTwigSiteVariables
- Obtenir la sortie de la page
- Fire onTwigPageVariables, également appelé pour chaque sous-page modulaire
- Si une page n'est pas trouvée ou n'est pas routable, déclenchez d'abord l'événement onPageFallBackUrl pour voir si nous avons une solution de secours pour un élément multimédia, puis déclenchez onPageNotFound si ce n'est pas le cas.
- Définir toutes les variables Twig sur l'objet Twig
- Définissez le nom du modèle en fonction des informations de fichier /en-tête/extension
- Appelez la méthode render()
- Renvoyer le HTML résultant
- Événement Fire onOutputGenerated
- Faites écho à la sortie dans le tampon de sortie
- Événement Fire onOutputRendered
- Construire un objet de réponse
- Arrêter le traitement ultérieur et générer la réponse
- Rendre la page avec la méthode processSite() de Twig
- En-tête et corps HTTP de sortie
- Débogueur de rendu (si activé)
- Fermer
- Fermer la session
- Fermer la connexion au client
- Événement Fire onShutdown
- Initialiser
Twig.php
- Initialiser
- Si la demande a l'attribut controller.class et une tâche ou une action :
- Exécutez l'initialisation du processeur
Chaque fois qu'une page a sa méthode content()
appelée, le cycle de vie suivant se produit :
Page.php
- Si le contenu n'est PAS mis en cache :
- Lancer l'événement onPageContentRaw
- Traitez la page en fonction des paramètres Markdown et Twig. Fire onMarkdownInitialized event
- Fire onMarkdownInitialized
- Événement Fire onPageContent