Grav - 生命周期

在本章中,我们将了解 Grav 的生命周期。Grav 生命周期决定了 Grav 如何处理以便通过插件扩展 Grav。下图显示了 Grav 生命周期流程。

Grav Lifecycle

Grav 生命周期的以下四个步骤 −

  • PHP 版本

  • 初始化 Loader 类

  • 获取 Grav 实例

  • 调用 Grav 进程

PHP 版本

检查 PHP 的版本,以确保我们运行的是 5.4.0 以上的 PHP 版本。

初始化 Loader 类

在第二步中,类加载器获取初始化。

获取 Grav 实例

  • 如果不存在实例,则调用 load() 方法并添加 Grav。

  • 它初始化调试器值并添加到调试器。

  • 它注册日志和错误处理程序。

  • 它添加 uri、任务、事件、缓存、会话、插件、主题、twig、分类法、语言、页面、资产和基本 url。

  • 它注册流和配置处理程序。

调用 Grav 进程

  • 它初始化配置、Uri 对象、错误处理程序、调试器和会话。

  • 初始化后,它启动缓冲输出。

  • 它初始化时区和插件并触发 onPluginsInitialized 事件。

  • 接下来,它初始化主题并触发 onThemeInitializedonTask[TASK] 事件。

  • 它初始化资产并触发 onAssetsInitialized 事件。

  • 它使用以下操作初始化 twig −

    • 根据配置,它设置 twig 模板路径。

    • 处理可用的语言模板。

    • 接下来,它触发 onTwigTemplatePaths事件。

    • 加载器链和 twig 配置。

    • 触发 onTwigInitialized 事件。

    • 它加载 twig 扩展并触发 onTwigExtensions 事件。

    • 它设置标准 twig 变量。

  • 接下来它初始化页面。

    • 它调用 buildPages() 方法。

    • 如果缓存良好,则从缓存中加载页面。如果缓存不好,则调用 recurse() 方法。

    • onBuildPagesInitialized 事件在 recurse() 方法中触发。

    • 如果文件为 .md,则执行以下操作 −

      • 要加载文件详细信息,将调用 init() 方法。

      • 它设置文件路径、修改和 ID。

      • 调用 header() 方法来初始化标头变量。

      • 调用 slug() 方法来设置 URL slug。

      • 调用 visible() 方法来设置可见状态。

      • 根据以 _(下划线)开头的文件夹,设置 modularTwig()

    • 它稍后会触发 onPageProcessed 事件。

    • recurse() 如果文件夹是找到。

    • 它会触发 onFolderProcessed 事件。

    • 调用 buildRoutes() 方法。

    • 对于所有页面,分类法 都已初始化

    • 构建 route 表以便快速查找。

  • 触发 onPagesInitializedonPageInitialized 事件。

  • 将调试器 CSS/JS 添加到资产中。

  • 使用 Twig 的 processSite() 方法,我们得到输出。

    • 事件onTwigSiteVariables 被触发。

    • 获取页面的输出。

    • 当页面未找到或不可路由时,将触发事件 onPageNotFound

    • 所有 Twig 变量均在 twig 对象上设置。

    • 根据文件/标头/扩展名信息设置模板名称。

    • render() 方法被调用。

    • 以 HTML 格式返回文件格式

  • 它触发 onOutputGenerated 事件。

  • 设置 HTTP 标头。

  • 显示输出

  • 输出缓冲区被刷新到页面。

  • 事件 onOutputRendered 将触发。

  • 关闭与客户端的连接。

  • 最后,它触发 onShutDown 事件。

当在页面上调用 content() 方法时,将发生以下生命周期。

  • 事件 onPageContentRaw 将触发。

  • 根据 Markdown 和 Twig 设置,它处理页面。

  • 它触发 onPageContentProcessed 事件。