drewlabs/libman

Libman 包是一个小巧的 PHP 工具库,用于通过基于配置的方法安装和创建业务特定的类实例。

v0.2.9 2024-09-19 16:38 UTC

This package is auto-updated.

Last update: 2024-09-19 16:38:45 UTC


README

Libman 包是一个小巧的 PHP 工具库,用于通过基于配置的方法安装和创建业务特定的类实例。该包提供了 YAML 和 JSON 库定义提供者,由运行时实例构建器使用。

概念

  • 什么是库?

libman 包实现中,库是一个围绕执行特定任务或一系列任务的 PHP 对象的纯抽象。具有业务领域特定实现的 PHP 对象,该对象必须由另一个 PHP 应用程序所需要。

  • 为什么选择 Libman

Libman 试图提供一个 API,在运行时构建库(类)的实例,而不需要开发者通过编程方式创建实例。开发者提供有关在将库添加到项目时使用哪种包管理器的配置值,以及用于创建库实例的工厂类。

使用开发者配置,以 YAML/JSON 编写,或任何库定义提供者,当在应用程序代码中需要时,Libman 将能够创建库实例。

安装

使用 composer 管理器将库添加到您的 PHP 应用程序

composer require drewlabs/libman

用法

  • 创建基于 composer 的库

基于 composer 的库是可使用 PHP composer 包管理器安装的 PHP 库。库管理器默认假设库工厂类的名称为 Factory

use Drewlabs\Libman\LibraryConfig;
use Drewlabs\Libman\LibraryInstallerFactory;

// Creates an instance of the library to install
// API: LibraryConfig::new(string name, string type, string package)
$library = LibraryConfig::new('ClientLibrary', 'composer', 'client/library');
  • 使用 PHP 工厂类创建库配置

基于工厂类的库配置是使用 PHP 工厂类创建库实例的库配置。

use Drewlabs\Libman\LibraryConfig;
use Drewlabs\Libman\LibraryInstallerFactory;

// Creates an instance of the library to install
// API : LibraryConfig::new(string name, ?string type, ?string package, string $factoryClass)
$library = LibraryConfig::new('ClientLibrary', null, null, ClientLibraryFactory::class);
  • 使用 LibraryManager 创建库实例

LibraryManagerlibman 提供的 PHP 类,用于根据配置文件或数据库配置创建库实例。

下面的代码使用 InMemoryConfigurationRepository 类,它将从 yaml 定义文件中读取库配置。

use Drewlabs\Libman\LibraryManager;
use Drewlabs\Libma\InMemoryConfigurationRepository;
use Drewlabs\Libman\YAMLDefinitionsProvider;

$repository = new InMemoryConfigurationRepository(YAMLDefinitionsProvider::create('./path/to/libman.yml'));
$libManager =  new LibraryManager($repository);

// Create an instance a composer based library named 'drewlabs/crypt'
$libManager->resolveInstance('drewlabs/crypt');

LibraryManager 类提供了静态方法 createInstance,它接受一个库配置实例。

use Drewlabs\Libman\LibraryManager;
use Drewlabs\Libman\LibraryConfig;

// Create an Instance of the library 
$instance = LibraryManager::createInstance(LibraryConfig::new('ClientLibrary));

API 参考

库的 API 参考可以在 [] 中找到。