README.md 5.6 KB

laravel-admin multitenancy

在同一套laravel框架中安装多个互相独立的后台。

Installation

解压之后放到storage/multitenancy目录下,然后打开项目根目录下的composer.json文件(注意:不是这个扩展包中的composer.json),增加下面的配置:

    "repositories": [
        {
            "type": "path",
            "url": "storage/multitenancy",
            "options": {
              "symlink": false
            }
        }
    ]

然后运行composer require laravel-admin-ext/multitenancy安装它

如果运行上面命令的过程中出现下面的错误:

[InvalidArgumentException]
  Could not find package laravel-admin-ext/multitenancy at any version for your minimum-stability (dev). Check the package spelling or your minimum-stability

这是由于composer的最小稳定性设置不满足,建议在composer.json里面将minimum-stability设置为dev,另外prefer-stable设置为true, 这样给你的应用安装其它package的时候,还是会倾向于安装稳定版本, composer.json的修改如下

{
    ...
    "minimum-stability": "dev",
    "prefer-stable": true,
    ...
}

然后运行下面的命令发布配置文件

php artisan vendor:publish --provider="Encore\Admin\Multitenancy\MultitenancyServiceProvider"

运行完成之后会生成新后台的配置文件config/tenancy.php, 这个文件和config/admin.php有一样的结构

由于新建的后台需要和原后台保持隔离,所以推荐新建一个新的数据库来存放对应表,这里要创建一个新的数据库,并且在config/database.php中添加一个名字为tenancy的数据库连接

当然数据库连接也可以是任何其它的名字,如果使用了其它的连接名,需要在config/tenancy.php中修改database.connection为相应的值。 如果你不想再创建一个新的数据库来安装新的后台,打开config/tenancy.php,将database下的connection设置为空字符串,然后下面的表配置全部重命名掉,避免和第一个后台的这几个表冲突,建议将admin前缀替换即可。

第二个后台将会默认安装在app/Tenancy目录下,如果你需要安装在其它目录,修改config/tenancy.php中的directory配置项即可,对应的route.prefixroute.namespaceauth.controller也要修改成对应的值。

把上面生成的配置文件路径写入config/admin.phpextensions下:

    'extensions' => [
    
        'multitenancy' => [
            'tenancy' => config_path('tenancy.php'),
        ]
        
    ]

最后运行下面的命令完成安装:

php artisan admin:install:tenancy

打开http://localhost:8080/tenancy访问新建的后台,这个新后台的开发工作就在app/Tenancy目录下了,这个后台对应的配置文件是config/tenancy.php,根据你的需求修改里面的配置。

安装多个后台

如果需要在这个项目中安装更多的后台,复制config/tenancy.php文件到config目录下,比如config/platform.php,然后参考上面修改里面的数据库连接

因为需要安装在一个新的目录,所以同样要修改config/platform.php中的directoryroute.prefixroute.namespaceauth.controller这几个配置项的值,

然后把配置文件路径写入config/admin.phpextensions下:

    'extensions' => [
        'multitenancy' => [
            'tenancy' => config_path('tenancy.php'),
            
            // 增加下面一行
            'platform' => config_path('platform.php'),
        ]
    ]

最后运行下面的命令安装

php artisan admin:install:tenancy platform

如果你在config/platform.php设置的路由前缀是paltform, 那么就打开http://localhost:8080/paltform访问新建的后台。

session冲突问题

如果你在同一个浏览器窗口打开两个后台,登入或者登出一个后台会影响到另一个后台,通过下面的方式来解决这个问题

区分路径访问

如果多个后台是通过不同的路径访问的,在每个后台的配置文件中(比如config/admin.phpconfig/tenacy.php)的route配置的中间件配置数据加上下面

    'route' => [

        'prefix' => 'tenancy',

        'namespace' => 'App\\Tenancy\\Controllers',

        'middleware' => ['web', 'admin', 'multi-session:path,/tenancy'],
    ],

'multi-session:path,/tenancy'中,/tenancy就是该后台的访问根路径

区分域名访问

如果多个后台是通过不同的域名访问的,分别在每个后台的配置文件中加上中间件

    'route' => [

        'prefix' => 'tenancy',

        'namespace' => 'App\\Tenancy\\Controllers',

        'middleware' => ['web', 'admin', 'multi-session:domain,admin.laravel.com'],
    ],

'multi-session:domain,admin.laravel.com'中,admin.laravel.com就是该后台的访问域名

常见问题

创建控制器

使用php artisan admin:make命令创建的控制器会在原后台目录下,你可以将生成的控制器移动到当前后台的Controllers目录下,然后修改一下命名空间即可。

如果你使用v1.7.0版本以上的laravel-admin, 可以加上namespace选项来指定生成的目录:

$ php artisan admin:make TestController --model=App\\Models\\User --title=用户管理 --namespace=App\\Tenancy\\Controllers

版本更新

下载新的版本之后,从安装步骤开始,到composer require laravel-admin-ext/multitenancy这一步即可。

版权声明

请尊重作者知识产权, 勿传播他人使用。