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'])
],
];