多应用 (多后台)

{tip} Since v1.4.0

默认安装后使用的是单应用模式,如果你想在同一个laravel项目中使用多应用模式,那么可以采用多后台模式,最终项目中的目录结构大概如下

  1. app
  2. ├──Admin
  3. ├── Controllers
  4. ├── ExampleController.php
  5. └── HomeController.php
  6. ├── Metrics
  7. └── ...
  8. ├── bootstrap.php
  9. └── routes.php
  10. ├──Admin2
  11. └── ...
  12. │──Admin3
  13. └── ...
  14. ...

生成新应用

运行命令,此命令只接受一个参数:应用名称,注意这里的应用名称请一定要使用大驼峰风格命名

  1. php artisan admin:app NewAdmin

运行成功后你的项目中会新增一个新的应用目录app/NewAdmin,以及新的配置文件config/new-admin.php

  1. app
  2. └──Admin
  3. ├── Controllers
  4. ├── ExampleController.php
  5. └── HomeController.php
  6. ├── Metrics
  7. └── ...
  8. ├── bootstrap.php
  9. └── routes.php
  10. config
  11. └──new-admin.php

启用

新应用生成完之后,就可以开始启用这个新应用了,打开配置文件config/admin.php,加入以下代码

  1. return [
  2. ...
  3. 'multi_app' => [
  4. // 与新应用的配置文件名称一致
  5. // 设置为true启用,false则是停用
  6. 'new-admin' => true,
  7. ],
  8. ];

然后就可以打开浏览器访问这个新应用了http://localhost:8000/new-admin

更改路由前缀

目前只能通过路由前缀区分不同应用,如果你想要更改应用的前缀,可以打开配置文件new-admin.php找到route.prefix参数进行更改即可

更改菜单

如果你想要在新应用中展示不同的菜单,可以参考以下方法

1.首先需要创建新的菜单表以及其关联表

  1. CREATE TABLE `new_admin_menu` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  3. `parent_id` int(11) NOT NULL DEFAULT '0',
  4. `order` int(11) NOT NULL DEFAULT '0',
  5. `title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  6. `icon` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  7. `uri` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  8. `created_at` timestamp NULL DEFAULT NULL,
  9. `updated_at` timestamp NULL DEFAULT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  12. CREATE TABLE `new_admin_permission_menu` (
  13. `permission_id` int(11) NOT NULL,
  14. `menu_id` int(11) NOT NULL,
  15. `created_at` timestamp NULL DEFAULT NULL,
  16. `updated_at` timestamp NULL DEFAULT NULL,
  17. UNIQUE KEY `admin_permission_menu_permission_id_menu_id_index` (`permission_id`,`menu_id`) USING BTREE
  18. ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
  19. CREATE TABLE `new_admin_role_permissions` (
  20. `role_id` int(11) NOT NULL,
  21. `permission_id` int(11) NOT NULL,
  22. `created_at` timestamp NULL DEFAULT NULL,
  23. `updated_at` timestamp NULL DEFAULT NULL,
  24. UNIQUE KEY `admin_role_permissions_role_id_permission_id_index` (`role_id`,`permission_id`) USING BTREE
  25. ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2.创建新的菜单模型,注意这里需要继承默认的菜单模型!!!

  1. <?php
  2. namespace App\Models;
  3. use Dcat\Admin\Models\Menu;
  4. class NewMenu extends Menu
  5. {
  6. protected $table = 'new_admin_menu';
  7. }

3.打开新应用的配置文件config/new-admin.php,然后修改以下参数

  1. return [
  2. ...
  3. 'database' => [
  4. ...
  5. // 写入新的模型和菜单表
  6. 'menu_table' => 'new_admin_menu',
  7. 'menu_model' => App\Models\NewMenu::class,
  8. ...
  9. // 新的中间表
  10. 'role_menu_table' => 'new_admin_role_menu',
  11. 'permission_menu_table' => 'new_admin_permission_menu',
  12. ],
  13. ];

这样新的应用就可以使用独立的菜单功能了

更改用户和权限

自定义用户和权限可以参考以上更改菜单的方式。另外如果是自定义用户的话,还需要更改配置文件config/new-admin.php中的以下参数

  1. ...
  2. 'auth' => [
  3. ...
  4. 'guard' => 'new-admin', // 必须是一个新的名字
  5. 'guards' => [
  6. 'new-admin' => [
  7. 'driver' => 'session',
  8. 'provider' => 'new-admin', // 必须是一个新的名字
  9. ],
  10. ],
  11. 'providers' => [
  12. 'new-admin' => [ // 必须是一个新的名字
  13. 'driver' => 'eloquent',
  14. // 这里换成新用户表的模型
  15. 'model' => App\Models\NewAdministrator::class,
  16. ],
  17. ],
  18. ...
  19. ],