{"id":13597868,"url":"https://github.com/eddy8/LightCMS","last_synced_at":"2025-04-10T05:33:49.348Z","repository":{"id":43642405,"uuid":"175428969","full_name":"eddy8/LightCMS","owner":"eddy8","description":"LightCMS 是一个基于 Laravel 开发的轻量级 CMS 系统，也可以作为一个通用的后台管理框架使用。A lightweight cms/admin framework powered by Laravel.","archived":false,"fork":false,"pushed_at":"2024-07-23T15:00:22.000Z","size":9435,"stargazers_count":350,"open_issues_count":0,"forks_count":86,"subscribers_count":19,"default_branch":"10.x","last_synced_at":"2024-11-06T22:40:43.993Z","etag":null,"topics":["admin","cms","laravel","lightcms","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eddy8.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-13T13:42:58.000Z","updated_at":"2024-09-23T06:32:01.000Z","dependencies_parsed_at":"2024-11-06T22:35:29.215Z","dependency_job_id":"ab17bc95-d046-4de1-a031-4c7e556ab056","html_url":"https://github.com/eddy8/LightCMS","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddy8%2FLightCMS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddy8%2FLightCMS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddy8%2FLightCMS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eddy8%2FLightCMS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eddy8","download_url":"https://codeload.github.com/eddy8/LightCMS/tar.gz/refs/heads/10.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248163468,"owners_count":21057948,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["admin","cms","laravel","lightcms","php"],"created_at":"2024-08-01T17:00:42.557Z","updated_at":"2025-04-10T05:33:44.282Z","avatar_url":"https://github.com/eddy8.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"# LightCMS\n[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/eddy8/lightCMS/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/eddy8/lightCMS/?branch=master)    [![StyleCI](https://github.styleci.io/repos/175428969/shield?branch=master)](https://github.styleci.io/repos/175428969)    [![Build Status](https://www.travis-ci.org/eddy8/lightCMS.svg?branch=master)](https://www.travis-ci.org/eddy8/lightCMS)    [![PHP Version](https://img.shields.io/badge/php-%3E%3D8.1.0-8892BF.svg)](http://www.php.net/)\n\n## 项目简介\n`lightCMS`是一个轻量级的`CMS`系统，也可以作为一个通用的后台管理框架使用。`lightCMS`集成了用户管理、权限管理、日志管理、菜单管理等后台管理框架的通用功能，同时也提供模型管理、分类管理等`CMS`系统中常用的功能。`lightCMS`的**代码一键生成**功能可以快速对特定模型生成增删改查代码，极大提高开发效率。\n\n`lightCMS`基于`Laravel 10.x`开发，前端框架基于`layui`。\n\n演示站点：[LightCMS Demo](http://lightcms.bituier.com/admin/login)。登录信息：admin/admin。请勿存储/删除重要数据，数据库会定时重置。\n\n`LightCMS\u0026Laravel`学习交流QQ群：**972796921**\n\n版本库分支说明：\n\n分支名称 | Laravel版本 | 维护中 | 备注\n:-: | :-: | :-: | :-:\n10.x    |   10.x | 是 |\n9.x    |   9.x | 是 | 建议使用\n8.x    |   8.x | 否 |\n7.x    |   7.x | 否 |\nmaster |   6.x | 否 |\n5.5    |   5.5 | 否 |\n\n## 功能点一览\n后台：\n* 基于`RBAC`的权限管理\n* 管理员、日志、菜单管理\n* 分类管理\n* 标签管理\n* 配置管理\n* 模型、模型字段、模型内容管理（后台可自定义业务模型，方便垂直行业快速开发）\n* 会员管理\n* 评论管理\n* 基于Tire算法的敏感词过滤系统\n* 普通模型增删改查代码一键生成\n\n前台：\n* 用户注册登录（包括微信、QQ、微博三方登录）\n* 模型内容详情页、列表页\n* 评论相关\n\n更多功能待你发现~\n\n## 后台预览\n![首页](https://user-images.githubusercontent.com/2555476/54804611-16fa4900-4caf-11e9-885e-7f5c0dac7ce4.png)\n\n![系统管理](https://user-images.githubusercontent.com/2555476/54804599-0ea20e00-4caf-11e9-8d10-526aca358916.png)\n\n## 系统环境\n`linux/windows \u0026 nginx/apache/iis \u0026 mysql 5.5+ \u0026 php 8.1.0+`\n\n* PHP \u003e= 8.1.0\n* OpenSSL PHP Extension\n* PDO PHP Extension\n* Mbstring PHP Extension\n* Tokenizer PHP Extension\n* XML PHP Extension\n* GD PHP Extension\n\n**注意事项**\n\n* 如果缓存、队列、session用的是 redis 驱动，那还需要安装 redis 和 php redis 扩展\n* 如果`PHP`安装了`opcache`扩展，请启用`opcache.save_comments`和`opcache.load_comments`配置（默认是启用的），否则无法正常使用[菜单自动获取](#菜单自动获取)功能\n\n## 系统部署\n\n### 获取代码并安装依赖\n首先请确保系统已安装好[composer](https://getcomposer.org/)。国内用户建议先[设置 composer 镜像](https://developer.aliyun.com/composer)，避免安装过程缓慢。\n```bash\ncd /data/www\ngit clone git@github.com:eddy8/LightCMS.git\ncd LightCMS\ncomposer install\n```\n### 系统配置并初始化\n设置目录权限：`storage/`和`bootstrap/cache/`目录需要写入权限。\n```bash\n# 此处权限设置为777只是为了演示操作方便，实际只需要给web服务器写入权限即可\nsudo chmod 777 -R storage/ bootstrap/cache/\n```\n新建一份环境配置，并配置好数据库等相关配置:\n```base\ncp .env.example .env\n```\n初始化系统：\n```base\nphp artisan migrate --seed\n```\n\n### 配置Web服务器（此处以`Nginx`为例）\n```\nserver {\n    listen 80;\n    server_name light.com;\n    root /data/www/lightCMS/public;\n    index index.php index.html index.htm;\n    \n    add_header X-Frame-Options \"SAMEORIGIN\";\n\n    location / {\n        try_files $uri $uri/ /index.php?$query_string;\n    }\n    \n    location ~* \\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$ {\n        add_header Content-Disposition Attachment;\n        add_header X-Content-Type-Options nosniff;\n    }\n\n    location ~ \\.php$ {\n        fastcgi_pass 127.0.0.1:9000;\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        #不同配置对应不同的环境配置文件。比如此处应用会加载.env.pro文件，默认不配置会加载.env文件。此处可根据项目需要自行配置。\n        #fastcgi_param   APP_ENV pro;\n        include fastcgi_params;\n    }\n}\n```\n\n### 后台登陆\n后台访问地址：`/admin/login`\n\n默认用户（此用户为超级用户，不受权限管理限制）：admin/admin\n\n## 权限管理\n基于角色的权限管理。只需新建好角色，给对应的角色分配好相应的权限，最后给用户指定角色即可。`lightCMS`中权限的概念其实就是菜单，一条菜单对应一个`laravel`的路由，也就是一个具体的操作。\n\n### 菜单自动获取\n只需要按约定方式写好指定路由的控制器注释，则可在[菜单管理](/admin/menus)页面自动添加/更新对应的菜单信息。例如：\n```php\n/**\n * 角色管理-角色列表\n *\n * 取方法的第一行注释作为菜单的名称、分组名。注释格式：分组名称-菜单名称。\n * 未写分组名称，则直接作为菜单名称，分组名为空。\n * 未写注释则选用uri作为菜单名，分组名为空。\n */\npublic function index()\n{\n    $this-\u003ebreadcrumb[] = ['title' =\u003e '角色列表', 'url' =\u003e ''];\n    return view('admin.role.index', ['breadcrumb' =\u003e $this-\u003ebreadcrumb]);\n}\n```\n\n需要注意的是，程序可以自动获取菜单，但是菜单的层级关系还是需要在后台手动配置的。\n\n## 配置管理\n首先需要将`config/light.php`配置文件中的`light_config`设置为`true`：\n\n然后只需在[配置管理](/admin/configs)页面新增配置项或编辑已存在配置项，则在应用中可以直接使用`laravel`的配置获取函数`config`获取指定配置，例如：\n```php\n// 获取 key 为 SITE_NAME 的配置项值\n$siteName = config('light_config.SITE_NAME');\n```\n也可以直接调用全局函数`function getConfig($key, $default = null)`获取配置。\n\n## 标签管理\n模型内容**打标签**是站点的一项常用功能，`lightCMS`内置了打标签功能。添加模型字段时选择表单类型为`标签输入框`即可。\n\n`lightCMS`采用中间表（content_tags）来实现标签和模型内容的多对多关联关系。\n\n## 模型管理\n`lightCMS`支持在后台直接创建模型，并可对模型的表字段进行自定义设置。设置完模型字段后，就不需要做其它工作了，模型的增删改查功能系统已经内置。\n\n这里说明下模型的表单验证及后端的保存和更新处理。如果有自定义表单验证需求，只需在`app/Http/Request/Admin/Entity`目录下创建模型的表单请求验证类即可。类名的命名规则：**模型名+Request**。例如`User`模型对应的表单请求验证类为`UserRequest`。\n\n如果想自定义模型的新增/编辑前端模板，只需在`app/resources/views/admin/content`目录下创建模板文件即可。模板文件的命名需遵循如下命名规则：**模型名_add.blade.php**。例如`User`模型对应的模板文件名为`user_add.blade.php`。\n\n如果想自定义模型的保存和更新处理逻辑，只需在`app/Http/Controllers/Admin/Entity`目录下创建模型的控制器类即可，`save`和`update`方法实现可参考`app/Http/Controllers/Admin/ContentController`。类名的命名规则：**模型名+Controller**。例如`User`模型对应的控制器类为`UserController`。同理，如果想自定义列表页，按上述规则定义`index`和`list`方法即可。\n\n另外，模型内容在新增、更新、删除时系统会触发相应的事件，你可以监听这些事件做相应的业务处理。下表所示为相应的事件说明：\n\n事件名 | 事件参数 | 触发时间 | 备注\n:-: | :-: | :-: | :-:\nApp\\Events\\ContentCreating    |   Illuminate\\Http\\Request $request, App\\Model\\Admin\\Entity $entity |  新增内容前  |\nApp\\Events\\ContentCreated    |   App\\Model\\Admin\\Content $content, App\\Model\\Admin\\Entity $entity |  新增内容后  |\nApp\\Events\\ContentUpdating    |   Illuminate\\Http\\Request $request, App\\Model\\Admin\\Entity $entity |  更新内容前  |\nApp\\Events\\ContentUpdated    |   Array $id, App\\Model\\Admin\\Entity $entity |  更新内容后  | $id 为更新内容的 ID 合集\nApp\\Events\\ContentDeleting    |   Illuminate\\Support\\Collection $contents, App\\Model\\Admin\\Entity $entity |  删除内容前  | $contents 为被删除内容的 App\\Model\\Admin\\Content 对象合集\nApp\\Events\\ContentDeleted    |   Illuminate\\Support\\Collection $contents, App\\Model\\Admin\\Entity $entity |  删除内容后  | $contents 为被删除内容的 App\\Model\\Admin\\Content 对象合集\nApp\\Events\\ContentCreateShow    |   App\\Model\\Admin\\Entity $entity, App\\Foundation\\ViewData $viewData |  新增内容表单展示前  | 通过调用$viewData的addCss、addJs、addTemplate方法，注入自定义css文件、js文件、模板至新增表单中\nApp\\Events\\ContentEditShow    |   App\\Model\\Admin\\Entity $entity, Illuminate\\Database\\Eloquent\\Model $model, App\\Foundation\\ViewData $viewData |  更新内容表单展示前  | 通过调用$viewData的addCss、addJs、addTemplate方法，注入自定义css文件、js文件、模板至更新表单中\nApp\\Events\\ContentListShow    |   int $entityId |  内容列表页展示前  | 一般用于自定义内容列表页展示字段、搜索字段等\nApp\\Events\\ContentListDataReturning    |   int $entityId, Illuminate\\Contracts\\Pagination\\Paginator $data |  内容列表页数据接口返回内容前  | 一般用于自定义内容列表页数据接口返回数据\n\n### 模型字段表单类型相关说明\n对于支持远程搜索的`select`表单类型，后端 API 搜索接口需返回的数据格式如下所示。code为0时, 表示正常, 反之异常。\n```json\n{\n    \"code\": 0,\n    \"msg\": \"success\",\n    \"data\": [\n        {\"name\":\"北京\",\"value\":1,\"selected\":\"\",\"disabled\":\"\"},\n        {\"name\":\"上海\",\"value\":2,\"selected\":\"\",\"disabled\":\"\"},\n        {\"name\":\"广州\",\"value\":3,\"selected\":\"selected\",\"disabled\":\"\"},\n        {\"name\":\"深圳\",\"value\":4,\"selected\":\"\",\"disabled\":\"disabled\"},\n        {\"name\":\"天津\",\"value\":5,\"selected\":\"\",\"disabled\":\"\"}\n    ]\n}\n```\n\n对于短文本（input，自动完成）表单类型，后端 API 接口需返回的数据格式如下所示：\n```json\n{\n    \"suggestions\": [\n        \"cms\",\n        \"cms是什么意思啊\",\n        \"cms是指的什么意思啊\",\n        \"cm是什么单位\",\n        \"沉默是金\",\n        \"cm是厘米还是分米\",\n        \"cm是什么\",\n        \"cm是什么意思啊\",\n        \"cm是什么意思单位\",\n        \"cm是什么单位的名称\"\n    ]\n}\n```\n\n对于`select`多选类型表单，默认数据库保存值为半角逗号分隔的多个选择值。当你设置字段类型为无符号整型时，数据库会保存多个选择值的求和值（当然前提是选择值都是整型数据）。\n\n### 搜索字段（$searchField）配置说明\n通过配置搜索字段，可以很方便的在模型的列表页展示搜索项。如下是一个示例配置：\n```php\n    public static $searchField = [\n        'name' =\u003e '用户名', // input搜索类型。key 为字段名称，value 为标题\n        'status' =\u003e [ // key 为字段名称，value 为相关配置\n            'showType' =\u003e 'select', // 下拉框选择搜索类型\n            'searchType' =\u003e '=', // 说明字段在数据库的搜索匹配方式，默认为like查询\n            'title' =\u003e '状态', // 标题\n            'enums' =\u003e [ // select下拉搜索项\n                0 =\u003e '禁用',\n                1 =\u003e '启用',\n            ],\n        ],\n        'recommend' =\u003e [ // key 为字段名称，value 为相关配置\n            'showType' =\u003e 'select', // 下拉框选择搜索类型\n            'searchType' =\u003e 'whereRaw', // 对于一些特殊的查询条件，无法通过上述普通的搜索匹配值来实现时，可将此值设置为 whereRaw\n            'searchCondition' =\u003e 'recommend \u0026 ? = ?', // 与 whereRaw 配合使用，? 表示查询条件值参数绑定。例：如果用户输入的查询值为 2，则最终生成的 sql 查询条件是： recommend \u0026 2 = 2\n            'title' =\u003e '推荐位', // 标题\n            'enums' =\u003e [ // select下拉搜索项\n                1 =\u003e '推荐位1',\n                2 =\u003e '推荐位2',\n                4 =\u003e '推荐位3',\n            ],\n        ],\n        'created_at' =\u003e [ // key 为字段名称，value 为相关配置\n            'showType' =\u003e 'datetime', // 日期时间搜索类型\n            'title' =\u003e '创建时间' // 标题\n        ]\n    ];\n```\n\n### 列表字段（$listField）配置说明\n通过配置列表字段，可以很方便的在模型的列表页展示列表项。如下是一个示例配置：\n```php\n    public static $listField = [\n        // pid 是列表字段名（不一定是模型数据库表的字段名，只要列表数据接口返回数据包含该字段即可）;title、width、sort 等属性参考 layui 的 table 组件表头参数配置即可\n        'pid' =\u003e ['title' =\u003e '父ID', 'width' =\u003e 80],\n        'entityName' =\u003e ['title' =\u003e '模型', 'width' =\u003e 100],\n        'userName' =\u003e ['title' =\u003e '用户名', 'width' =\u003e 100],\n        'content' =\u003e ['title' =\u003e '内容', 'width' =\u003e 400],\n        'reply_count' =\u003e ['title' =\u003e '回复数', 'width' =\u003e 80, 'sort' =\u003e true],\n        'like' =\u003e ['title' =\u003e '喜欢', 'width' =\u003e 80, 'sort' =\u003e true],\n        'dislike' =\u003e ['title' =\u003e '不喜欢', 'width' =\u003e 80, 'sort' =\u003e true],\n    ];\n```\n\n### 列表操作项（$actionField）配置说明\n通过配置列表操作项，可以很方便的在模型的列表页操作列添加自定义链接。如下是一个示例配置：\n```php\n    public static $actionField = [\n        // chapterUrl 是字段名（不一定是模型数据库表的字段名，只要列表数据接口返回数据包含该字段即可）\n        'chapterUrl' =\u003e ['title' =\u003e '章节', 'description' =\u003e '当前小说的所有章节'],\n    ];\n```\n\n### 排序字段（$sortFields）配置说明\n通过配置排序字段，可以很方便的在模型的列表页自定义数据的排序规则。如下是一个示例配置：\n```php\n    public static $actionField = [\n        // 数组的键为排序字段名和升序/降序配置（半角逗号分隔），值为前台展示名称\n        'updated_at,desc' =\u003e '更新时间（降序）',\n        'id,asc' =\u003e 'id（升序）',\n    ];\n```\n\n### 按钮字段（$btnField）配置说明\n通过配置按钮字段，可以很方便的在模型的列表页自定义操作按钮。如下是一个示例配置：\n```php\n    public static $btnField = [\n        [\n            'title' =\u003e 'Google',\n            'description' =\u003e '搜索引擎',\n            'url' =\u003e 'https://www.google.com',\n            'target' =\u003e '_blank',\n            'class' =\u003e '',\n        ],\n    ];\n```\n\n\u003e 小提示：如果你是自定义模型，建议自定义模型继承`App\\Model\\Admin\\Model`模型，方便对上述配置项进行自定义。\n\n\u003e 通过监听特定的事件来配置上述属性，可以方便的自定义各种展示效果。\n\n## 系统日志\n`lightCMS`集成了一套简单的日志系统，默认情况下记录后台的所有操作相关信息，具体实现可以参考`Log`中间件。\n\n可以利用`Laravel`的[任务调度](https://laravel.com/docs/5.8/scheduling#introduction)来自动清理系统日志。启用任务调度需要在系统的计划任务中添加如下内容：\n```\n* * * * * cd /path-to-your-project \u0026\u0026 php artisan schedule:run \u003e\u003e /dev/null 2\u003e\u00261\n```\n\n可以通过配置`log_async_write`项来决定是否启用异步写入日志（默认未启用），异步写入日志需要运行`Laravel`的[队列处理器](https://laravel.com/docs/5.8/queues#running-the-queue-worker)：\n```bash\nphp artisan queue:work\n```\n\n## 代码一键生成\n对于一个普通的模型，管理后台通常有增删改查相关的业务需求。`lightCMS`拥有一键生成相关代码的能力，在建好模型的数据库表结构后，可以使用如下`artisan`命令生成相关代码：\n```bash\n# config 为模型名称 配置 为模型中文名称\nphp artisan light:basic config 配置\n```\n成功执行完成后，会创建如下文件（注意：相关目录需要有写入权限）：\n\n* routes/auto/config.php\n路由：包含模型增删改查相关路由，应用会自动加载`routes/auto/`目录下的路由。\n* app/Model/Admin/Config.php\n模型：[$searchField](#搜索字段searchField配置说明) 属性用来配置搜索字段，[$listField](#列表字段listfield配置说明) 用来配置列表视图中需要展示哪些字段数据。\n* app/Repository/Admin/ConfigRepository.php\n模型服务层：默认有一个`list`方法，该方法用来返回列表数据。需要注意的是如果列表中的数据不能和数据库字段数据直接对应，则可对数据库字段数据做相应转换，可参考`list`方法中的`transform`部分。\n* app/Http/Controllers/Admin/ConfigController.php\n控制器：默认有一个`$formNames`属性，用来配置新增/编辑表单请求字段的白名单。此属性必需配置，否则获取不到表单数据。参考 [request 对象的 only 方法](https://laravel.com/docs/5.5/requests#retrieving-input)\n* app/Http/Requests/Admin/ConfigRequest.php\n表单请求类：可在此类中编写表单验证规则，参考 [Form Request Validation](https://laravel.com/docs/5.5/validation#form-request-validation)\n* resources/views/admin/config/index.blade.php\n列表视图：列表数据、搜索表单。\n* resources/views/admin/config/index.blade.php\n新增/编辑视图：只列出了基本架构，需要自定义相关字段的表单展示。参考 [layui form](https://www.layui.com/doc/element/form.html)\n\n最后，如果想让生成的路由展示在菜单中，只需在[菜单管理](/admin/menus)页面点击**自动更新菜单**即可。\n\n## 敏感词检测\n如果需要对发表的内容（文章、评论等）进行内容审查，则可直接调用`LightCMS`提供的`checkSensitiveWords`函数即可。示例如下：\n```php\n$result = checkSensitiveWords('出售正品枪支');\nprint_r($result);\n/*\n[\n    \"售 出售 枪\",\n    \"正品枪支\"\n]\n*/\n```\n\n## 图片上传\nLightCMS中图片默认上传到本地服务器。如果有自定义需求，比如上传到三方云服务器，可参考`config/light.php`配置文件中的`image_upload`配置项说明，自定义处理类需要实现`App\\Contracts\\ImageUpload`接口，方法的返回值数据结构和系统原方法保持一致即可。\n```json\n{\n    \"code\": 200,\n    \"state\": \"SUCCESS\",\n    \"msg\": \"\",\n    \"url\": \"xxx\"\n}\n```\n\n## 系统核心函数、方法等说明\n做这个说明的主要目的是让开发者了解一些核心功能，方便自定义各类功能开发。毕竟框架是不可能代劳所有事情滴^_\n***\n方法名称：App\\Repository\\Admin\\CategoryRepository::tree()\n\n功能说明：\n\n返回分类的树结构信息。数据结构可以参考下图所示：\n\n![tree](https://user-images.githubusercontent.com/2555476/62991339-d7acde80-be81-11e9-9811-9d4d27e01f07.png)\n\n此数据结构基本包含了分类的所有结构化信息。相关字段的含义也比较清楚，此处只对`path`字段做下说明：该字段是指当前分类的所有上级分类链，这样可以很方便的知道某个分类的所有父级分类。比如图中的`test`分类的path字段值为`[1, 2]`，那么很容易的知道它的父级分类是：游戏 射击\n***\n异常：`App\\Exceptions\\InvalidAppDataException`\n\n应用场景：在应用程序中抛出该异常，框架会自动跳转到信息提示页面，提示内容为自定义异常内容。一般用于应用运行时错误的页面提示。\n\n***\n`App\\Repository\\Admin\\CategoryRepository`类中与分类操作相关的方法：\n```\n/**\n * 获取指定层级的所有分类，根分类层级为 0\n *\n * @param int $level\n * @param null $tree\n * @return Collection\n */\npublic static function levelCategories(int $level = 0, $tree = null): Collection\n\n/**\n * 获取指定分类的所有叶子节点分类，$categoryId 为 0 时获取所有叶子节点分类\n *\n * @param int $categoryId\n * @param null $tree\n * @return Collection\n */\npublic static function leafCategories(int $categoryId = 0, $tree = null): Collection\n\n/**\n * 获取指定分类的所有父级分类，没有父分类时返回空数组\n *\n * @param int $categoryId\n * @param null $tree\n * @return array\n */\npublic static function parentCategories(int $categoryId, $tree = null): array\n```\n\n## 前台相关\n### 用户注册登录\n`LightCMS`集成了一套简单的用户注册登录系统，支持微信、QQ、微博三方登录。三方登录相关配置请参考`config/light.php`。\n\n## 说明\n有问题可以提 issue ，为项目贡献代码可以提 pull request\n\n## Project supported by JetBrains\n\nMany thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.\n\n[![](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://www.jetbrains.com/?from=https://github.com/eddy8)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddy8%2FLightCMS","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feddy8%2FLightCMS","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feddy8%2FLightCMS/lists"}