decodelabs/genesis

通用引导框架

v0.9.0 2024-08-21 22:11 UTC

README

PHP from Packagist Latest Version Total Downloads GitHub Workflow Status PHPStan License

PHP应用的通用引导框架

Genesis提供运行时引导应用所需的一切。消除在框架和应用程序中最低层代码最佳结构方面的猜测。

DecodeLabs博客上获取新闻和更新。

安装

通过Composer安装

composer require decodelabs/genesis

用法

导入

Genesis使用VeneerDecodeLabs\Genesis下提供统一的接口。您可以通过这个静态接口访问所有主要功能,而不影响测试和依赖注入。

中心

Genesis要求库的使用者实现一系列接口来表示引导过程的重要部分。有了这些类,它就可以为所有环境提供统一、可靠的引导过程。

最重要的就是Hub接口

namespace DecodeLabs\Genesis;

use DecodeLabs\Genesis\Loader\Stack as StackLoader;
use DecodeLabs\Genesis\Environment\Config as EnvConfig;
use DecodeLabs\Genesis\Build\Manifest as BuildManifest;

interface Hub
{
    public function getApplicationPath(): string;
    public function getLocalDataPath(): string;
    public function getSharedDataPath(): string;
    public function getApplicationName(): string;
    public function initializeLoaders(StackLoader $loader): void;
    public function loadBuild(): Build;
    public function loadEnvironmentConfig(): EnvConfig;
    public function initializePlatform(): void;
    public function loadKernel(): Kernel;
    public function getBuildManifest(): ?BuildManifest;
}

中心提供访问所有所需的关键信息和结构,以使应用程序运行。一旦实例化,就可以通过Genesis Veneer接口访问中心

$appPath = Genesis::$hub->getApplicationPath();

内核

内核是您的应用程序的执行者 - 中心设置它,然后内核运行它。

interface Kernel
{
    public function initialize(): void;
    public function getMode(): string;

    public function run(): void;
    public function shutdown(): void;
}

与中心一样,内核可以这样访问

$runMode = Genesis::$kernel->getMode();

构建和环境

在设置阶段,中心将为EnvironmentBuild对象提供信息和配置

if(Genesis::$environment->isDevelopment()) {
    // Do fun dev stuff
}

$envName = Genesis::$environment->getName();
$rootPath = Genesis::$build->getPath();

if(Genesis::$build->isCompiled()) {
    // We've compiled a build
}

// Get time of build to use in URLs as a cache buster
$cacheBuster = Genesis::$build->getCacheBuster();

运行应用程序

在设置好必要的接口后,您的入口文件只需要以下内容

// Composer autoload
require_once 'path/to/vendor/autoload.php';

use DecodeLabs\Genesis;
use My\Hub;

Genesis::run(Hub::class, [
    // any options your custom hub needs
]);

编译后的构建

Genesis支持高级构建编译过程,可以用来将应用程序的源代码与活动运行时代码隔离开。这对于无法轻易使用第三方自动化部署系统的旧框架特别有用。

由于在加载任何其他代码之前需要找到正确的构建文件夹,并且需要在执行过程中无缝部署更新而不会无意中混合库的不同版本,因此编译后的构建是一个复杂的话题。

有关如何使用编译后的构建的详细信息,请参阅此处

许可

Genesis采用MIT许可证。有关完整的许可文本,请参阅LICENSE