platformsh/config-reader

用于访问 Platform.sh 环境变量的小型辅助工具

2.4.1 2023-09-14 17:07 UTC

This package is auto-updated.

Last update: 2024-09-14 19:52:56 UTC


README

Quality Assurance

此库提供了一种简化和易于使用的方法来与 Platform.sh 环境交互。它提供了一些实用方法,可以比直接读取原始环境变量更干净地访问路由和关系。

此库需要 PHP 7.2 或更高版本。

安装

composer require platformsh/config-reader

用法示例

示例

use Platformsh\ConfigReader\Config;

$config = new Config();

if (!$config->isValidPlatform()) {
    die("Not in a Platform.sh Environment.");
}

$credentials = $config->credentials('database');

$conn = new \PDO($config->formattedCredentials('database', 'pdo_mysql'), $credentials['username'], $credentials['password'], [
    // Always use Exception error mode with PDO, as it's more reliable.
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    // So we don't have to mess around with cursors and unbuffered queries by default.
    \PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => TRUE,
    // Make sure MySQL returns all matched rows on update queries including
    // rows that actually didn't have to be updated because the values didn't
    // change. This matches common behavior among other database systems.
    \PDO::MYSQL_ATTR_FOUND_ROWS => TRUE,
]);

// Do stuff with the $conn here.

API 参考

创建配置对象

use Platformsh\ConfigReader\Config;

$config = new Config();

config 现在是一个 Platformsh\ConfigReder\Config 对象,它提供对 Platform.sh 环境的访问。

isValidPlatform() 方法返回 true,如果代码正在一个已定义 Platform.sh 环境变量的上下文中运行。如果它返回 false,则大多数其他函数在使用时将抛出异常。

检查环境

以下方法返回 truefalse,以帮助确定代码正在何种上下文中运行

$config->inBuild();

$config->inRuntime();

$config->onDedicated();

$config->onProduction();

注意

Platform.sh 将不再将其 99.99% 的正常运行时间 SLA 产品 称为 "企业版",而是称为 "专用版"。配置读取库已相应更新,包括一个 onDedicated 方法来替换 onEnterprise。目前 onEnterprise 仍然可用。现在它调用新方法,并且没有引入破坏性更改。

建议您尽快将项目更新为使用 onDedicated,因为 onEnterprise 将在未来版本的此库中被移除。

读取环境变量

以下魔法属性返回相应的环境变量值。有关每个属性的说明,请参阅 Platform.sh 文档

以下在构建和运行时都可用

$config->applicationName;

$config->appDir;

$config->project;

$config->treeId;

$config->projectEntropy;

以下仅在 inRuntime() 返回 true 时可用

$config->branch;

$config->documentRoot;

$config->smtpHost;

$config->environment;

$config->socket;

$config->port;

读取服务凭证

Platform.sh 服务 在一个 services.yaml 文件中定义,并通过在应用程序的 .platform.app.yaml 文件中列出对该服务的 relationship 来暴露给应用程序。用户、密码、主机等信息随后通过 PLATFORM_RELATIONSHIPS 环境变量暴露给正在运行的应用程序,该变量是一个 base64 编码的 JSON 字符串。以下方法允许比自行解码环境变量更容易地访问凭证信息。

$creds = $config->credentials('database');

credentials() 的返回值是一个关联数组,与关系 JSON 对象相匹配,包括适当的用户、密码、主机、数据库名和其他相关信息。有关您服务的确切结构和每个属性的说明,请参阅 服务文档。在大多数情况下,该信息可以直接传递给连接到服务的任何其他客户端库。

在尝试从其中访问凭证之前,请确保使用 hasRelationship() 方法定义了关系

if ($config->hasRelationship('database')) {
    $creds = $config->credentials('database');
    // ...
}

格式化服务凭证

在某些情况下,用于连接服务的库可能需要以特定的方式格式化凭据;它可能是一种DSN字符串,或者需要将某些值连接到数据库名称等。对于这些情况,您可以使用“凭据格式化器”。凭据格式化器是任何可调用的对象(函数、匿名函数、对象方法等),它接受一个凭据数组并返回任何类型,因为库可能需要不同类型。

凭据格式化器可以注册在配置对象上,并且包含一些内置的格式化器。这允许第三方库提供自己的格式化器,可以轻松集成到Config对象中,以便更容易使用。

function formatMyService(array $credentials) string
{
	return "some string based on $credentials";
}

// Call this in setup.
$config->registerFormatter("my_service", 'formatMyService');


// Then call this method to get the formatted version

$formatted = $config->FormattedCredentials("database", "my_service");

第一个参数是在.platform.app.yaml中定义的关联名称。第二个是使用registerFormatter()预先注册的格式化器。如果服务或格式化器缺失,将抛出异常。formatted的类型将取决于格式化器函数,可以安全地直接传递给客户端库。

包含两个内置的格式化器

  • pdo_mysql返回适用于使用PDO连接到MySQL或MariaDB的DSN。请注意,PDO仍然需要凭据数组中作为单独参数传递的用户名和密码。
  • pdo_pgsql返回适用于使用PDO连接到PostgreSQL的DSN。请注意,PDO仍然需要凭据数组中作为单独参数传递的用户名和密码。

读取Platform.sh变量

Platform.sh允许您定义在构建时间、运行时间或两者都可用的任意变量。它们存储在PLATFORM_VARIABLES环境变量中,这是一个base64编码的JSON字符串。

以下两种方法允许您从代码中访问这些值,而无需自己解码值

$config->variables();

此方法返回所有变量的关联数组。通常此方法不是必需的,并且首选使用$config->variable()

$config->variable("foo", "default");

此方法查找“foo”变量。如果找到,则返回。如果没有找到,则返回可选的第二个参数作为默认值。

读取路由

Routes在Platform.sh上定义了项目如何处理传入请求;这主要意味着什么应用程序容器将服务请求,但也包括缓存配置、TLS设置等。路由也可以有一个可选的ID,这是访问它们的推荐方式。

$config->getRoute("main");

getRoute()方法接受一个字符串作为路由ID(在这种情况下为“main”),并返回相应的路由数组。如果没有找到路由,它将抛出异常。

要访问所有路由或搜索没有ID的路由,routes()方法返回一个以URL为键的路由关联数组。这反映了PLATFORM_ROUTES环境变量的结构。

如果在构建阶段调用,则抛出异常。