多应用 (多后台)
<h1>多应用 (多后台)</h1>
<p>默认安装后使用的是单应用模式,如果你想在同一个<code>laravel</code>项目中使用多应用模式,那么可以采用多后台模式,最终项目中的目录结构大概如下</p>
<pre><code>app
├──Admin
│ ├── Controllers
│ │ ├── ExampleController.php
│ │ └── HomeController.php
│ ├── Metrics
│ │ └── ...
│ ├── bootstrap.php
│ └── routes.php
│
├──Admin2
│ └── ...
│
│──Admin3
│ └── ...
...</code></pre>
<h3>生成新应用</h3>
<p>运行命令,此命令只接受一个参数:应用名称,注意这里的应用名称请一定要使用<strong>大驼峰风格</strong>命名</p>
<pre><code class="language-php">php artisan admin:app NewAdmin</code></pre>
<p>运行成功后你的项目中会新增一个新的应用目录<code>app/NewAdmin</code>,以及新的配置文件<code>config/new-admin.php</code></p>
<pre><code>app
└──Admin
├── Controllers
│ ├── ExampleController.php
│ └── HomeController.php
├── Metrics
│ └── ...
├── bootstrap.php
└── routes.php
config
└──new-admin.php</code></pre>
<h3>启用</h3>
<p>新应用生成完之后,就可以开始启用这个新应用了,打开配置文件<code>config/admin.php</code>,加入以下代码</p>
<pre><code class="language-php">return [
...
'multi_app' =&gt; [
// 与新应用的配置文件名称一致
// 设置为true启用,false则是停用
'new-admin' =&gt; true,
],
];</code></pre>
<p>然后就可以打开浏览器访问这个新应用了<code>http://localhost:8000/new-admin</code>。</p>
<h3>更改路由前缀</h3>
<p>目前只能通过路由前缀区分不同应用,如果你想要更改应用的前缀,可以打开配置文件<code>new-admin.php</code>找到<code>route.prefix</code>参数进行更改即可</p>
<h3>更改菜单</h3>
<p>如果你想要在新应用中展示不同的菜单,可以参考以下方法</p>
<p>1.首先需要创建新的菜单表以及其关联表</p>
<pre><code class="language-sql">CREATE TABLE `new_admin_menu` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL DEFAULT '0',
`order` int(11) NOT NULL DEFAULT '0',
`title` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`icon` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`uri` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `new_admin_permission_menu` (
`permission_id` int(11) NOT NULL,
`menu_id` int(11) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
UNIQUE KEY `admin_permission_menu_permission_id_menu_id_index` (`permission_id`,`menu_id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE `new_admin_role_permissions` (
`role_id` int(11) NOT NULL,
`permission_id` int(11) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
UNIQUE KEY `admin_role_permissions_role_id_permission_id_index` (`role_id`,`permission_id`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;</code></pre>
<p>2.创建新的菜单模型,注意这里需要继承默认的菜单模型!!!</p>
<pre><code class="language-php">&lt;?php
namespace App\Models;
use Dcat\Admin\Models\Menu;
class NewMenu extends Menu
{
protected $table = 'new_admin_menu';
}</code></pre>
<p>3.打开新应用的配置文件<code>config/new-admin.php</code>,然后修改以下参数</p>
<pre><code class="language-php">return [
...
'database' =&gt; [
...
// 写入新的模型和菜单表
'menu_table' =&gt; 'new_admin_menu',
'menu_model' =&gt; App\Models\NewMenu::class,
...
// 新的中间表
'role_menu_table' =&gt; 'new_admin_role_menu',
'permission_menu_table' =&gt; 'new_admin_permission_menu',
],
];</code></pre>
<p>这样新的应用就可以使用独立的菜单功能了</p>
<h3>更改用户和权限</h3>
<p>自定义用户和权限可以参考以上更改菜单的方式。另外如果是自定义用户的话,还需要更改配置文件<code>config/new-admin.php</code>中的以下参数</p>
<pre><code class="language-php"> ...
'auth' =&gt; [
...
'guard' =&gt; 'new-admin', // 必须是一个新的名字
'guards' =&gt; [
'new-admin' =&gt; [
'driver' =&gt; 'session',
'provider' =&gt; 'new-admin', // 必须是一个新的名字
],
],
'providers' =&gt; [
'new-admin' =&gt; [ // 必须是一个新的名字
'driver' =&gt; 'eloquent',
// 这里换成新用户表的模型
'model' =&gt; App\Models\NewAdministrator::class,
],
],
...
],</code></pre>
<h3>使用不同域名区分应用</h3>
<p>默认是通过路由前缀区分应用的,如果想要使用域名区分应用,只需要更改如下配置即可</p>
<pre><code class="language-php"> 'route' =&gt; [
'domain' =&gt; 'dev.dcat.com', // 配置你的域名
'prefix' =&gt; '', // 路由前缀建议设置为空
'namespace' =&gt; 'App\\Admin\\Controllers',
'middleware' =&gt; ['web', 'admin'],
],</code></pre>