dlimars/laravel-tenant-subdomain

一个用于简化基于应用程序子域创建路由和交换数据库的包装包

v1.0.5 2018-05-21 14:28 UTC

This package is auto-updated.

Last update: 2024-09-10 20:17:43 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

此包将帮助您使用Laravel在子域中组织客户。

安装

将其添加到您的 composer.json

"require": {
    //..
        "dlimars/laravel-tenant-subdomain": "^1.0"
    },

或在终端中执行

    composer require dlimars/laravel-tenant-subdomain

config/app.php 中添加 provider 和 facade

'providers' => [
    // outros providers
    Dlimars\Tenant\Providers\TenantServiceProvider::class,
],

'aliases' => [
    // outros aliases
    'Tenant' => Dlimars\Tenant\Facades\Tenant::class,
]

app/Http/Kernel.php 中添加 middleware

protected $routeMiddleware = [
    // outros middlewares
    'tenant.database' => \Dlimars\Tenant\Middlewares\TenantDatabase::class
];

之后,打开您的控制台并执行: php artisan vendor:publish,修改 config/tenant.php 文件以满足您的需求,打开您的 .env 文件并添加

APP_HOST=domain.com
TENANT_SUBDOMAIN_ARGUMENT=_account_

使用方法

要生成子域路由,请使用以下方式

// Tenant::getFullDomain() retorna algo como '{_account_}.domain.com'

Route::group(['domain' => Tenant::getFullDomain()], function () {
    Route::get('subdomain-teste/{id}', ['as' => 'subdomain-teste', function($subdomain, $id){
        return route('subdomain-teste', ['123']);
    }]);
});

要为非子域的应用程序主要部分生成路由,请使用以下方式

// Tenant::getDomain() retorna algo como 'domain.com'

Route::group(['domain' => Tenant::getDomain()], function () {
    Route::get('domain-teste/{id}', ['as' => 'domain-teste', function($id){
        return route('domain-teste', ['123']);
    }]);
});

// isso impede que rotas do dominio possam ser acessadas através do subdominio

根据子域加载数据库配置

默认情况下,数据库配置文件将读取 config/tenant 文件夹中,内容示例如下

return [
    'driver'    => 'mysql',
    'host'      => 'host',
    'database'  => 'db_subdomain',
    'username'  => 'user_subdomain',
    'password'  => 'user_password',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
    'strict'    => false,
];

文件将被读取并添加为默认连接 tenant,这是通过中间件完成的,在所有将使用独立数据库的路线中,使用中间件 tenant.database

Route::group(['domain' => Tenant::getFullDomain(), 'middleware' => ['tenant.database']], function () {
    Route::get('domain-teste/{id}', ['as' => 'domain-teste', function($id){
        return route('domain-teste', ['123']);
    }]);
});

假设用户访问 http://beltrano.domain.com,要加载的配置应位于 /config/tenants/beltrano.php 中(这是可配置的)

创建数据库配置

要创建新的数据库配置,请使用以下方式

$config = [
    'foo' => 'bar'
];

Tenant::makeDatabaseConfigFile('foo', $config);

这将在 config/tenants 文件夹中生成一个名为 foo.php 的文件(或配置中定义的名称/位置),内容如下

return [
    'foo' => 'bar'
];

删除数据库配置

要删除配置文件,只需执行以下操作

Tenant::dropDatabaseConfigFile('foo');