OwlAdmin与stancl/tenancy结合实现多租户

首先安装laravel

laravel new cms

# 进入项目
cd cms

# config/app.php设置中文,不改也无所谓
'locale' => 'zh_CN',

安装stancl/tenancy

文档地址:https://tenancyforlaravel.com/docs/v3/quickstart

命令行

composer require stancl/tenancy
php artisan tenancy:install

修改.env中配置

# 数据库
DB_CONNECTION=mysql
DB_HOST=62.234.57.55
DB_PORT=3379
DB_DATABASE=xd_cms_test
DB_USERNAME=mycms
DB_PASSWORD=Mycms2024.com

# 缓存
CACHE_DRIVER=redis

# redis
REDIS_HOST=62.234.57.55
REDIS_PASSWORD=null
REDIS_PORT=6399

项目中添加模型

<?php
namespace App\Models;

use Stancl\Tenancy\Database\Models\Tenant as BaseTenant;
use Stancl\Tenancy\Contracts\TenantWithDatabase;
use Stancl\Tenancy\Database\Concerns\HasDatabase;
use Stancl\Tenancy\Database\Concerns\HasDomains;

class Tenant extends BaseTenant implements TenantWithDatabase
{
    use HasDatabase, HasDomains;
}

config/tenancy.php中修改配置

'tenant_model' => \App\Models\Tenant::class,

outes/web.php中做如下修改

// routes/web.php, api.php or any other central route files you have

foreach (config('tenancy.central_domains') as $domain) {
    Route::domain($domain)->group(function () {
        Route::get('/', function () {
            return view('welcome');
        });
    });
}

配置config/tenancy.php

'central_domains' => [
    'www.cms.local', // 这里是主域名,用于管理商户,确保已经配置好nginx
],

可修改database.prefix为自己想要的数据库前缀

现在来安装OwlAdmin
文档地址:https://doc.owladmin.com/guide/basic/install

composer require slowlyo/owl-admin
php artisan admin:publish
php artisan admin:install

接下来回到tenancy,
1、将 database/migrations/create_users_table.php 移动 database/migrations/tenant 下
2、将 vendor/slowlyo/owl-admin/database/migrations/
install_owl_admin.php 复制到 database/migrations/tenant 下

将vendor/slowlyo/owl-admin/src/Models下5个Model BaseModel,AdminUser,AdminRole,AdminMenu,AdminPermission复制到app/Models下并修改命名空间,AdminUser,AdminRole,AdminMenu,AdminPermission四个Model继承新的BaseModel
接下来重要一点,把baseModel中的__construct注释掉

修改config/admin.php中models配置,配置成刚刚的4个对应的model,例如我的是加了一层目录

'models' => [
        'admin_user'       => \App\Models\Owl\AdminUser::class,
        'admin_role'       => \App\Models\Owl\AdminRole::class,
        'admin_menu'       => \App\Models\Owl\AdminMenu::class,
        'admin_permission' => \App\Models\Owl\AdminPermission::class,
    ],

参考 文档执行以下命令

$ php artisan tinker
>>> $tenant1 = App\Models\Tenant::create(['id' => 'foo']);
>>> $tenant1->domains()->create(['domain' => 'foo.localhost']);
>>>
>>> $tenant2 = App\Models\Tenant::create(['id' => 'bar']);
>>> $tenant2->domains()->create(['domain' => 'bar.localhost']);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容