kris-ro/php-dependency-injection

PHP 依赖注入容器

v1.0.0 2024-09-14 19:07 UTC

This package is auto-updated.

Last update: 2024-09-14 19:19:55 UTC


README

PHP 依赖注入容器类。扩展 kris-ro/php-config 功能并依赖于它进行配置。

安装

使用 composer 安装 PHP 依赖注入容器

composer require kris-ro/php-dependency-injection

配置

Container 从由 Container::buildConfig() 构建的配置数组中读取请求服务的定义。
所有服务必须在配置数组的 services 分支中定义。每个服务通过其服务标识符(以下示例中的 service_identifier)来识别。
定义数组中的第一个键必须是包含类名(带命名空间前缀,可选地带有方法名后缀)的 class。有效示例

{
  "services" : {
    "service_identifier" : {
      "class" : "\\Class\\With\\Namespace"
    },
    "another_service_identifier" : {
      "class" : "\\Class\\With\\Namespace::MethodName"
    }
  }
}

class 可以由定义数组中的其他条目跟随,表示将要执行的创建服务的实例方法(按照在定义中列出的顺序执行)。有效示例

{
  "services" : {
    "myPDO" : {
      "class": "\\PDO",
      "_construct": {
        "dsn": "mysql:host=localhost;dbname=test",
        "username": "k",
        "password": "123456"
      }
    },
    "validator" : {
      "class": "\\KrisRo\\Validator\\Validator",
      "createRegexRules" : {
        "rules": {
          "alphanumeric": "/^[a-z0-9\\-_]+$/i"
        }
      }
    }
  }
}

如上所示,对于 myPDO,指定了 _construct,因为它需要这三个参数。
第二个定义 validator 也指定了一个带有单个参数 rules 的方法。

定义中的 参数名称 来自方法。
如果你查看上面的 PDO 定义,你会看到 _constructor 有三个参数 dsnusernamepassword,它们分别映射到 PDO 构造函数参数 $pdo$username$password

有三种 参数值类型

  • 一个 服务标识符,前缀为字符 @
  • 一个来自配置数组的 条目路径,前缀为字符 #
  • 其他一切按原样传递

作为参数的服务
credentialsOrPDO 的值引用 myPDO 服务。

{
  "services" : {
    "myPDO" : {
      "class": "\\PDO",
      "_construct": {
        "dsn": "mysql:host=localhost;dbname=test",
        "username": "k",
        "password": "123456"
      }
    },
    "model" : {
      "class": "\\KrisRo\\PhpDatabaseModel\\Model",
      "_construct": {
        "credentialsOrPDO": "@myPDO"
      }
    }
  }
}

来自配置数组的条目路径
rules 的值引用配置数组中的 validator > rules 条目。

{
  "validator" : {
    "rules": {
      "alphanumeric": "/^[a-z0-9\\-_]+$/i"
    }
  },
  "services" : {
    "validator": {
      "class": "\\KrisRo\\Validator\\Validator",
      "_construct": {
        "rules": "#validator/rules"
      }
    }
  }
}

使用方法

一旦定义了服务,它就非常简单

use KrisRo\PhpDependencyInjection\Container;

# first build the configuration array. See more at https://github.com/kris-ro/php-config
Container::buildConfig('/absolute/path/to/your/folder/with/json/files');

# load the service you need
$pdo = Container::service('myPDO');
$model = Container::service('model');
$validator = Container::service('validator');