webman 是一款基于 workerman 开发的 HTTP 服务框架,支持自定义进程,数据库,Redis,日志等功能,提供超高性能可扩展的 HTTP 服务。
官方提供了简单的用户模块,包含个人资料、头像和密码设置。
现在需要在用户模块中添加一些菜单。
在 plugin/user/api/Template.php 文件,getSidbarData 方法中定义了默认的菜单项。本打算在这里修改,但细想,这里不太合适,遂查找官网,找到了这篇webman用户模块,添加顶部菜单了,页面无法显示文章。
首先,在事件配置文件 plugin/oauth/config/event.php,定义配置:
(这个文件是我的写的插件中用到的,后期根据需要自定在配置中增加)
<?php use plugin\oauth\app\service\UserEvent; return [ // 当有用户注册时 'user.register' => [ [UserEvent::class, 'onUserRegister'] ], // 当用户退出时 'user.logout' => [ [UserEvent::class, 'onUserLogout'], ], // 当渲染用户端导航菜单时 'user.nav.render' => [ [UserEvent::class, 'onUserNavRender'] ], // 当渲染用户中心左侧边栏时 'user.sidebar.render' => [ [UserEvent::class, 'onUserSidebarRender'] ], ];
之后,在 plugin/oauth/app/service/UserEvent.php 定义用户事件:
(根据需要,配置 onUserNavRender 在顶部显示菜单,onUserSidebarRender 在左侧显示菜单)
<?php namespace plugin\oauth\app\service; use stdClass; /** * 用户相关事件 */ class UserEvent { /** * 用户注册时 * @return void */ public function onUserRegister() { } /** * 用户退出时 * @return void */ public function onUserLogout() { } /** * 当渲染用户端顶部导航菜单时 * @param stdClass $object * @return void */ public function onUserNavRender(stdClass $object) { $request = request(); $path = $request ? $request->path() : ''; // 用户登陆后才显示顶部菜单 if (session('user.id')) { $object->navs[] = [ 'name' => '应用管理', 'items' => [ ['name' => '创建应用', 'url' => '/app/oauth/index/create', 'class' => $path === '/app/oauth/index/create' ? 'active' : ''], ['name' => '应用列表', 'url' => '/app/oauth/index/list', 'class' => $path === '/app/oauth/index/list' ? 'active' : ''], ] ]; } } /** * 当渲染用户中心左侧菜单时 * @param stdClass $object * @return void */ public function onUserSidebarRender(stdClass $object) { $request = request(); $path = $request ? $request->path() : ''; // 添加左侧菜单 $object->sidebars[] = [ 'name' => '应用管理', 'items' => [ ['name' => '创建应用', 'url' => '/app/oauth/index/create', 'class' => $path === '/app/oauth/index/create' ? 'active' : ''], ['name' => '应用列表', 'url' => '/app/oauth/index/list', 'class' => $path === '/app/oauth/index/list' ? 'active' : ''], ] ]; } }
开发插件时,某些功能,要求用户登录,那么你需要配置中间件,在 plugin/oauth/config/middleware.php 文件定义:
(这里直接使用了用户模块的中间件)
<?php use plugin\user\api\Middleware as UserMiddleware; return [ '' => [ new UserMiddleware(['admin']) ], ];