【问题标题】:Is there a sane way to stack Laravel 5.7 config files?有没有一种健全的方法来堆叠 Laravel 5.7 配置文件?
【发布时间】:2019-02-22 15:39:26
【问题描述】:

我有一个代码库,可以运行同一站点的多个变体。有没有一种巧妙的方法让配置文件相互扩展,这样我就可以拥有一个父配置文件,其中包含多个覆盖特定值的子文件?

类似的,

config/site.php
  return [
    'foo' => 10,
    'bar' => 20,
    'baz' => 30
  ];

config/site1/site.php
  return [
    'foo' => 5,
  ];

config/site2/site.php
  return [
    'baz' => 99
  ];

它可以让您返回以下值

 echo config('site1.site.foo'); // 5  - from site1/site.php
 echo config('site1.site.bar'); // 20 - from site.php
 echo config('site1.site.baz'); // 30 - from site.php

 echo config('site2.site.foo'); // 10 - from site.php
 echo config('site2.site.bar'); // 20 - from site.php
 echo config('site2.site.baz'); // 99 - from site2/site.php

感觉好像我错过了一个微不足道的答案......

【问题讨论】:

  • 这些不同的变体是否在它们自己的不同实例上运行?也许你可以使用.env 文件。
  • 这是一个站点/代码库,可通过 20 个不同的子域访问。每个子域与其他子域基本相同,但具有不同的数据库表、统计跟踪代码、语言选项以及与第三方 API 的集成。

标签: laravel config laravel-5.7


【解决方案1】:

现在我唯一能想到的并假设您有多个实例。

1) 在你的环境变量中添加CLIENT=site1

2) 创建一个配置文件,例如: tenant.php

return [
   'folder' => env('CLIENT', 'default')
]; 

3) 当您需要为您的客户之一提供特定的配置文件时:

config(config('tenant.folder')'.site.baz');

4) 如果baz不存在时需要默认值

config(config('tenant.folder')'.site.baz', 'default.site.baz');

更好的方法是创建一个设置数据库,您可以缓存并与助手一起使用(例如:$baz = settings('baz', 'default');

【讨论】:

    【解决方案2】:

    我将创建一个执行租户感知配置的全局函数,如下所示:

    function configWithTenant($tenant='', $configPath) {
       if (empty($tenant)) {
        return config($configPath);
       }
    
       return config("$tenant.$configpath");
    }
    

    所以当你调用这个函数时,如果没有传入tenant,它会读取默认的site,否则它会读取tenant1.site

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 2010-10-02
      相关资源
      最近更新 更多