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