首先安装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']);