双入口架构
2026/10/26大约 1 分钟
双入口架构
同一份插件代码,通过清单的 entry / manage_entry 提供两个访问入口。
| 入口 | 默认路径 | 打开方式 | 登录态 |
|---|---|---|---|
前台公开入口 entry | /app/{name} | 应用门户新标签直访 | 可选增强(免登后带身份) |
管理入口 manage_entry | /app/{name}/manage | 基座后台菜单经 qiankun 加载 | 免登 + 菜单驱动 + RBAC |
基座的职责边界
基座只渲染入口、只透传身份,不判定插件内部权限。某个用户在某个插件里能做什么,完全由插件自己决定。
入口怎么渲染
entry / manage_entry 对应插件控制器的方法,渲染 view 下的 html。以 am_demo 为例:
#[RouteGroup('/app/am_demo')]
class AppController
{
protected array $noNeedLogin = ['index', 'manage', /* ... */];
public function index(): Response { return view('app/index', ['title' => '插件示例']); }
public function manage(): Response { return view('app/manage', ['title' => '插件示例']); }
}页面入口 GET /app/am_demo 与 GET /app/am_demo/manage 因注解无法生成无尾斜杠路径,在插件 config/route.php 手动注册:
Route::get('/app/am_demo', [AppController::class, 'index']);
Route::get('/app/am_demo/manage', [AppController::class, 'manage']);管理入口的安全网菜单
manage_entry 对应一条以 app:entry: 为 code 前缀的"管理入口"菜单,由 PluginManager::syncEntry 维护,是插件在后台"能否被打开"的兜底入口。插件用 PluginRegistrar 声明业务菜单时禁止占用 app:entry: 前缀。
纯插件
entry 与 manage_entry 都为空串的插件被识别为纯插件:只提供后端服务/接口,无页面。基座前端据此隐藏入口与"打开"按钮。
open_mode
open_mode 决定前端加载方式:micro(qiankun 微应用,默认)或 iframe。
