aljawad / laravel-multidomain
Laravel应用在子域上的多租户设置
Requires
- laravel/framework: >=5.5.0
This package is auto-updated.
Last update: 2024-09-15 20:20:34 UTC
README
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.com
和site2.com
共享相同的代码。
我们只需做
php artisan domain:add site1.com
和
php artisan domain:add site2.com
上述命令简单地创建了两个新的环境文件,分别是.env.site1.com
和.env.site2.com
,在其中可以放置每个站点的所有特定配置,例如数据库配置、缓存配置以及其他配置,如常规环境文件。此外,在标准storage
文件夹内,创建了两个新的文件夹,分别是site1_com
和site2_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:add
和 domain: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 相同)