1. 创建数据库表:创建一个数据库表来存储菜单数据。该表至少需要包含以下字段:id(主键)、name(菜单名称)、pid(父级菜单ID)。你可以根据业务需求添加其他字段。
-
- namespace app\api\controller;
-
- use app\common\controller\Api;
-
- class Grade extends Api
- {
- protected $noNeedLogin = ['*'];
- protected $noNeedRight = ['*'];
- // 判断请求方式为POST时,调用MenuList方法获取菜单数据,并通过$this->success方法返回成功响应结果。
- // MenuList方法是一个递归方法,用于获取指定父级ID下的菜单数据并处理为树形结构。方法的参数$pid表示当前父级ID,默认为0,即顶级菜单。
- // 在方法内部,首先通过db('grade')->where('pid', $pid)->select()查询数据库中指定父级ID的菜单数据
- // 然后,通过循环遍历菜单数据,逐个处理每个菜单项。如果当前菜单项存在子菜单(即$children数组不为空),则将子菜单赋值给menu['children'];否则,将空数组赋值给menu['children']。
- // 最后,将处理后的菜单项添加到result数组中,并返回result数组中,并返回result作为最终的菜单数据。
- public function index()
- {
- if(request()->isPost()){
- $menus = $this->MenuList();
- $this->success('请求成功',$menus);
- }
- }
- /**
- * 递归树形菜单
- */
- public function MenuList($pid=0)
- {
- $menus = db('grade')->where('pid',$pid)->select();
- $result = [];
- foreach ($menus as $menu){
- $children = $this->MenuList($menu['id']);
- if(!empty($children)){
- $menu['children'] = $children;
- }else{
- $menu['children'] = [];
- }
- $result[] = $menu;
- }
- return $result;
- }
- }
通过以上步骤,就可以创建递归属性菜单了。可以根据你的具体业务需求进行相应的修改和扩展。