Php 使用Laravel 4.2进行多站点设置

Php 使用Laravel 4.2进行多站点设置,php,laravel,config,Php,Laravel,Config,我有一个有趣的问题,社区可能会想参与其中并提供帮助。我有一个自定义论坛软件。称之为A。现在,我打算推出不同的版本,称之为B和C。但警告如下 a) 它们必须保持同步。A、 B和C自然是独立的存储库 b) 代码相同,但目标市场不同。比如说游戏和食物 c) 我的想法是使用3个不同的配置文件,并在Laravel Forge上使用环境变量 我相信有人有更好的解决办法。我不知道这将如何在本地主机和生产上实现。我需要听一些有经验的人的故事,以及推荐的方法 为了了解我的情况,我尝试在/config/multi-

我有一个有趣的问题,社区可能会想参与其中并提供帮助。我有一个自定义论坛软件。称之为A。现在,我打算推出不同的版本,称之为B和C。但警告如下

a) 它们必须保持同步。A、 B和C自然是独立的存储库

b) 代码相同,但目标市场不同。比如说游戏和食物

c) 我的想法是使用3个不同的配置文件,并在Laravel Forge上使用环境变量

我相信有人有更好的解决办法。我不知道这将如何在本地主机和生产上实现。我需要听一些有经验的人的故事,以及推荐的方法

为了了解我的情况,我尝试在/config/multi-site文件夹中创建3个配置文件,并将它们命名为a.php、b.php、c.php。除此之外,我觉得自己很笨,因为我不知道在论坛的特定版本运行时如何启动这些配置文件。另外,如何使用Github将回购协议B和回购协议C与A同步?

我认为没有真正的“完美”答案,这取决于您想要什么以及您想在哪里处理问题

独立存储库 如果您使用的是单独的存储库,请确保数据库和迁移以及部分内容(例如,应可用于所有站点的特定变量/值)也已同步。这是让我头疼的一点

您可以在中的文件中设置环境内容

app/config/
然后通过环境检测,根据您的站点选择合适的

如果您需要更灵活的环境检测,可以向detectEnvironment方法传递一个闭包,允许您按照自己的意愿实现环境检测:

$env = $app->detectEnvironment(function()
{
    return $_SERVER['MY_LARAVEL_ENV'];
});
然后基于此,您可以调用相应的配置文件

对于每个网站,一个repo(本地、临时、实时)中包含一组不同的文件,或者一个repo(site1本地、site1临时、site1实时、site2本地…)中包含所有文件

不过,我还没有测试过

一个代码库+一个数据库 另一种选择是(这就是我最后所做的)使用相同的代码库并拥有一个数据库,然后根据访问的域显示特定的数据。因此,在许多数据库表中,必须将“site_id”作为列。当你搜索用户而不是

User::where('name', 'Jeffrey')->get();
大概是

User::where('site_id', Site::GetThisId())->where('name', 'Jeffrey')->get();
其中GetThisId()检查环境/域并返回正确的id

当然,您仍然可以使其更加高效,代码更不容易出错(例如,使用User::where('site_id',site::thisId())->get()覆盖User::get(),等等)

这种方法对我来说效果很好,因为我只有一个代码库、一个数据库和一个服务器,我不需要确保所有的代码库和数据库都是同步的。也许有些人认为它不够优雅,但它有助于快速创建新网站

问题是你在哪里分开 因此,实际的问题是你想在哪里“分离”这些站点。您是否希望它们位于单独的repo/服务器上,并且每个人都有相同的配置集,但内容不同?或者为每个站点设置一个repo但不同的配置文件集?也可以使用相同的id在数据库级别上分隔数据


这有助于回答您的问题吗?

您可以使用多租户站点的概念,即您使用相同的数据库,但在表上有一个额外的标识符来标识它们所属的站点(这通常用于分隔用户在同一表中拥有的数据)。不,我不会走那么远。我负担得起单独的主机和数据库。这不是价格问题,只是一个分离数据的想法。我不想要如此紧密的耦合,我也不喜欢这个想法。scalibility如果希望在使用相同代码库的同时,将每个网站的数据库分开(允许每个网站有多个主机名)。你可以看看我一直在做的工作。如果这不完全是你需要的,你可能会得到一些关于如何解决手头问题的灵感。我对第一个感兴趣。但真正的问题是,配置文件、环境和部署。如何真正做到这一点?我确实有个主意,但从未尝试过。谢谢你的回答。我已经更新了答案,在这里包含了一个关于环境检测的小片段:。我希望这将进一步帮助你。