aljawad/laravel-multidomain

Laravel应用在子域上的多租户设置

v1.1.0 2018-06-24 14:07 UTC

This package is auto-updated.

Last update: 2024-09-15 20:20:34 UTC


README

Laravel License

laravel-multidomain

一个用于在多域名设置上使用Laravel应用的Laravel扩展

描述

此包允许使用单个Laravel安装来处理多个HTTP域名。有许多情况,不同的客户在代码方面使用相同的应用,但在数据库、存储和配置方面并不相同。使用此包可以非常简单地为每个此类客户获取特定的env文件、特定的存储路径和特定的数据库。

文档

安装

将gecche/laravel-multidomain作为依赖项添加到composer.json

{
    "require": {
        "gecche/laravel-multidomain": "1.1.*"
    }
}

使用composer update更新您的包或使用composer install安装。

您还可以使用composer require gecche/laravel-multidomain添加包,然后指定您想要的版本(目前,dev-v1.1.*是您的最佳选择)。

此包需要覆盖Laravel核心函数的最小集,因为需要在引导过程一开始就检测应用程序运行的HTTP域名以获取特定的环境文件。

这个前提意味着与标准Laravel包相比,此包需要更多“配置步骤”。

首先要采取的行动是替换整个Laravel容器,方法是修改位于引导文件夹中bootstrap文件夹顶部的以下行。

//$app = new Illuminate\Foundation\Application(
$app = new Aljawad\Multidomain\Foundation\Application(
    realpath(__DIR__.'/../')
);

然后更新两个应用程序内核(HTTP和CLI)。

在位于app\Http文件夹中的Kernel.php文件顶部,执行以下更改

use Aljawad\Multidomain\Foundation\Http\Kernel as HttpKernel;
//use Illuminate\Foundation\Http\Kernel as HttpKernel;

同样,在app\Console文件夹中的Kernel.php文件中

use Aljawad\Multidomain\Foundation\Console\Kernel as ConsoleKernel;
#use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

下一步是覆盖位于config文件夹中app.php文件中的$providers数组中的QueueServiceProvider

        //Illuminate\Queue\QueueServiceProvider::class,
        Aljawad\Multidomain\Queue\QueueServiceProvider::class,

最后,您发布配置文件。

php artisan vendor:publish 

此包使用发现功能。遵循上述步骤,您的应用程序将知道在HTTP和CLI请求中运行的HTTP域名(包括队列支持)。

使用方法

此包发布了三个命令来管理您的应用程序HTTP域名。

domain.add命令

主要命令是domain:add命令,它接受要添加到应用程序的HTTP域名的参数。让我们假设有两个域名site1.comsite2.com共享相同的代码。

我们只需做

php artisan domain:add site1.com 

php artisan domain:add site2.com 

上述命令简单地创建了两个新的环境文件,分别是.env.site1.com.env.site2.com,在其中可以放置每个站点的所有特定配置,例如数据库配置、缓存配置以及其他配置,如常规环境文件。此外,在标准storage文件夹内,创建了两个新的文件夹,分别是site1_comsite2_com,它们的子结构与主存储文件夹相同。特别是,新存储文件夹内的文件夹结构可以在domain.php配置文件中进行自定义。

区分HTTP域名

对于应用程序接收到的每个HTTP请求,都将加载特定的环境文件并使用特定的存储文件夹。如果没有找到特定的环境文件和/或存储文件夹,则使用标准文件。通过使用$_SERVER['SERVER_NAME']PHP变量来检测正确的HTTP域名。

为了区分域名,可以使用Artisan命令(包括队列相关内容),现在每个Artisan命令都接受一个新选项domain。例如

php artisan list --domain=site1.com 

domain.remove命令

domain:remove 命令简单地通过删除其环境文件来从应用中移除指定的 HTTP 域。使用 force 选项允许删除域存储文件夹。例如:

php artisan domain:remove site2.com 

domain.update_env 命令

domain:update_env 命令允许通过传递一个 json 编码的数据数组到文件的末尾来更新一个或所有环境文件。使用 domain 选项,仅更新一个环境文件。没有 domain 选项,该命令更新所有环境文件,包括标准的 .env 文件。要更新的域列表存储在 domain.php 配置文件中。domain:adddomain:remove 分别向此文件中的 domains 数组添加和移除条目。例如:

php artisan domain:update_env --domain_values='{"TOM_DRIVER":"TOMMY"}' 

TOM_DRIVER=TOMMY 行添加到所有找到的环境文件中。

更多信息

在运行时,当前 HTTP 域存储在 Laravel 容器中,可以通过此包添加的 domain() 方法访问。

兼容性

v1.1 需要 Laravel 5.5 或更高版本

v1.0 需要 Laravel 5.1 或更高版本(不再维护且未针对 Laravel 5.4 进行测试,但该包的使用与 1.1 相同)