manifoldco/manifold-laravel

一个从您的Manifold账户拉取配置的包

v1.1.0 2018-12-12 13:58 UTC

This package is not auto-updated.

Last update: 2024-09-27 15:25:12 UTC


README

官方Laravel包,将您的Manifold机密连接到您的Laravel应用程序。

行为准则 | 贡献指南

GitHub release Travis License Latest Stable Version

介绍

Manifold Laravel包允许您连接到您的Manifold账户,并将您的凭证、密钥、配置等从您的Manifold账户拉取到您的Laravel应用程序中。

安装

  1. 安装包
composer require manifoldco/manifold-laravel
  1. 发布配置文件,并从供应商列表中选择 manifoldco\manifold-laravel
php artisan vendor:publish
  1. 至少将您的Manifold Bearer token添加到您的.env文件中,如下所示:MANIFOLD_API_TOKEN=YOUR-TOKEN-HERE

  2. 您可以通过在.env文件中提供标签来选择性地指定一个项目。

MANIFOLD_PROJECT=YOUR-PROJECT-LABEL

用法

安装和配置完成后,您的Manifold项目/资源的凭证将作为配置拉入您的Laravel应用程序。您可以使用config辅助函数通过资源的标签和凭证的键(它们在Manifold中存在)使用点符号访问凭证。例如,如果您有一个名为API_KEY的凭证的Mailgun资源设置,可以使用config('mailgun.API_KEY')(其中mailgun是资源的标签)来访问它。

请注意,键是区分大小写的。此外,请注意当配置与其他Laravel配置冲突时,Manifold配置将具有优先级。

别名

在某些情况下,您可能希望在配置文件(在您的/config目录中)中使用Manifold的凭证。最明显的用例是在/config/database.php中需要的数据库凭证。由于您无法可靠地使用config()辅助函数从配置文件中访问配置,因此可以在您的config/manifold.php文件中定义别名。别名可以用数组(与标准配置一样)或使用点符号定义数组键。将现有的配置作为键,将Manifold凭证作为值。例如,从Manifold中自定义PostgreSQL服务拉取PostgreSQL密码可能看起来像这样:'database.connections.pgsql.password' => 'custom-pgsql.DB_PASSWORD'。这将从custom-pgsql资源拉取DB_PASSWORD凭证并将其值分配给database.connections.pgsql.password,因此不需要操作您的现有config/database.php文件。

示例

  1. 您在Manifold中有一个标签为my-project的项目。您想在控制器方法中访问Mailgun API密钥。您的Mailgun资源名称为mailgun,API密钥凭证为API_KEY

将以下内容添加到.env

MANIFOLD_API_TOKEN=0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789AB
MANIFOLD_PROJECT=my-project

在您的控制器php文件中

class MyController extends Controller{
    public function process_mail(){

        $mailgun_key = config('mailgun.API_KEY');

        //mail processing logic here
    }
}
  1. 您在Manifold中有一个标签为my-project的项目。您想存储在Manifold中的自定义服务的PostgreSQL凭证。您的自定义服务名称为custom-pgsql,PostgreSQL凭证键为DB_HOSTDB_DATABASEDB_USERNAMEDB_PASSWORD

将以下内容添加到.env

MANIFOLD_API_TOKEN=0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789AB
MANIFOLD_PROJECT=my-project

在您的config/manifold.php

return [
    'token' => env('MANIFOLD_API_TOKEN', null),
    'project' => env('MANIFOLD_PROJECT', null),
    'aliases' => [
        /*
            note that while you can mix and match array syntax and dot-notation
            it's best to use one or the other, this merely illustrates that both
            are possible
        */
        'database.connections.pgsql.password' => 'custom-pgsql.DB_PASSWORD',
        'database' => [
            'connections' => [
                'pgsql' => [
                    'host' => 'custom-pgsql.DB_HOST',
                    'database' => 'custom-pgsql.DB_DATABASE',
                    'username' => 'custom-pgsql.DB_USERNAME',
                ]
            ]
        ]
    ],
];
  1. 您在Manifold中有一个名为 my-project 的项目。您希望将JAWS存储的MySQL凭据存储在Manifold中。您的JAWS服务名为 jaws-mysql,连接凭据以URL语法表示为 JAWSDB_URL。URL语法与Laravel直接不兼容,必须进行解析。为此,您可以传递一个闭包作为别名的值。闭包不接收任何参数,但所有配置都已加载,因此您可以访问并操作Manifold中存储的凭据。

将以下内容添加到.env

MANIFOLD_API_TOKEN=0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789AB
MANIFOLD_PROJECT=my-project

在您的config/manifold.php

return [
    'token' => env('MANIFOLD_API_TOKEN', null),
    'project' => env('MANIFOLD_PROJECT', null),
    'aliases' => [
        'database' => [
            'connections' => [
                'mysql' => [
                    'host' => function(){
                        $url = parse_url(config('custom-service.jaws'));
                        return $url['host'];
                    },
                    'password' => function(){
                        $url = parse_url(config('custom-service.jaws'));
                        return $url['pass'];
                    },
                    'username' => function(){
                        $url = parse_url(config('custom-service.jaws'));
                        return $url['user'];
                    },
                    'database' => function(){
                        $url = parse_url(config('custom-service.jaws'));
                        return substr($url["path"], 1);
                    }
                ]
            ]
        ]
    ],
];

注意事项

  1. Laravel当前加载配置文件的方式是按字母顺序加载。本包依赖于这一特性,以确保Manifold项目的配置在其它配置文件中可用。如果您创建了一个名称在字母顺序上位于Manifold配置文件(00-manifold.php01-manifold.php)之前的配置文件,您可能会遇到意外的结果。如果Laravel更改了其加载顺序,请更新此包。
  2. 现在,本包使用本地文件系统来存储API缓存,而不是使用Laravel的缓存系统,这是为了允许包在加载整个应用程序之前(即在缓存和存储驱动程序可用之前)缓存API数据。如果您在一个无法写入本地磁盘的环境中,将不会提供缓存功能,并且每次启动都会需要API请求。类似地,如果运行应用程序的用户没有对 storage/.manifold.cache.key 的写入权限,您将无法使用缓存功能,直到解决这个问题。