platformsh / config-reader
用于访问 Platform.sh 环境变量的小型辅助工具
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: ^8.5
README
此库提供了一种简化和易于使用的方法来与 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
,则大多数其他函数在使用时将抛出异常。
检查环境
以下方法返回 true
或 false
,以帮助确定代码正在何种上下文中运行
$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
环境变量的结构。
如果在构建阶段调用,则抛出异常。