# swoft-Xadmin
**Repository Path**: misran010/swoft-Xadmin
## Basic Information
- **Project Name**: swoft-Xadmin
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-12-10
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### swoft Xadmin
基于swoft 2.x 和 xadmin 开发的快速后台框架。
##### 版本和依赖要求:
* php 7.2+
* swoole 4.4+
* php-redis拓展
* linux或macos系统
##### 参考文档
[swoole文档](https://wiki.swoole.com/)
[swoft文档](https://swoft.org/docs)
[xadmin演示](http://x.xuebingsi.com/)
# 升级记录
| 版本 | 更新内容 |
| ---- | ---- |
| v0.0.1 | |
| v0.0.2 | 删除一个特别智障的问题 |
| v0.0.3 | 修复一些特别蛋疼的问题 |
| v0.1.0 | 修复一些无聊的问题,使用官方session组件 |
# 安装方法
* 1、修改```./config/dev(pro)/bese.php```中关于数据库的配置
* 2、在mysql中新建一个数据库
* 3、composer install
* 4、执行```php bin/swoft install:exec```,如果数据库中出现表说明安装成功
* 5、启动框架访问
# 启动方式
```
swoftcli run -c ws:start
```
或者
```
php bin/swoft ws:start
```
## 切换配置
应用配置位于 ```./config/{ENV}/base.php```
切换环境配置只需要将```./app/base.php```文件中的配置修改为:
```php
//应用级配置
'config' => [
'path' => __DIR__ . '/../config',
'env' =>'pro' //pro为生产环境配置,dev为开发环境配置
],
```
# 分组路由
支持分组路由,如 ```http://DOMAIN/admin/auth.group/lists```,对应目录: ```Http/Controller/Admin/Auth/AdminController```
# 快速curd模板
内置快速curd操作,可以方便快捷的搭建出常用的curd功能。支持:
* lists 分页列表
* add 添加
* edit 修改
* del 删除
* 快捷导出到excel
## 使用要求
* 控制器的名称必须与路由名称对应,如: ```IndexController.php``` 路由地址必须是 ```/admin/index```;
* 提供各种重写方法,以 ```__foo```格式重写,返回指定的格式;
* 模板引擎使用THINKPHP,文档地址: [think-template](https://www.kancloud.cn/manual/think-template/1286403)
## 路径定义
```url
http://DOMAIN/admin/{Controller}/{lists/add/edit/del}/{?id=}
```
```Controller``` 为你的控制器名称,路由将自动寻找
```controller/{lists/add/edit/del}```模板文件 如:```http://DOMAIN/admin/index/lists```
,路由器会寻找```/resource/views/index/lists.html```模板文件,否则将会抛出异常到控制台。
## 全局配置
在需要使用快速curd模板的控制器中引入Trait(trait引入方式见php document)即可
```php
use \App\Http\Traits\HttpBaseTrait;
```
### 关联实体模型
```php
protected $model ={Entity}::class;
```
```Entity``` :你需要关联的实体名称:如
```php
protected $model =Admin::class;
```
## 一、list列表模板
```url
http://DOMAIN/admin/{Controller}/lists
```
lists 分页模板会查找你绑定的实体内容并将内容分页输出。
lists将会输出以下变量:
* ``` $list ```: 格式化后的分页数据
* ``` $keywords ```: 查询的条件名称
* ``` $page ```; html分页样式(前端模板使用原生方式输出 ```{:$page}``` )
### lists快捷模板
##### 一、模糊搜索
```html
```
* ```params[like][value]```和```params[like][fields]```为固定模板查询name值
* ```{field1}|{field2}```替换成你需要查询的数据库的表字段(必须与表字段对应),使用管道符"|" 分割。
##### 二、精确搜索
```html
```
* ```name="params[{fields}]"``` fields替换成你需要查询的字段名称;
* ```value="{your values}"``` your values为你需要搜索的值
#### 重写方法
##### 一、 重写请求查询条件方法
用于重写查询条件,返回条件数组
```php
__listsKeywords(array $params, array $map):array
```
* ```array $param``` 通过``` \context()->getRequest()->input();``` 获取的请求参数。
* ```array $map``` 组装好的符合swoft的ORM查询条件数组
* 必须返回符合swoft的ORM查询条件数组!
##### 二、重写查询语句
用于定制特殊查询语句,返回查询结果
```php
__listsData(array $map,array $params):array
```
* ```array $map``` 符合swoft的ORM查询条件数组
* ```array $params``` 通过```\context()->getRequest()->input()```获取的参数
* 返回查询的结果的数组
##### 三、重写渲染页面
用于自行渲染页面,返回标准响应结果
```php
__listsDisplay(array $buildData):Response
```
* ```array $buildData``` 包含```array $list```查询结果,```array $keywords```请求参数数组,```string $page```分页html样式
* 返回```Swoft\Http\Message\Response``` 对象
## 二、add\edit快捷模板
```url
http://DOMAIN/admin/{Controller}/{add/edit}{/?id=}
```
### 2.1 添加页面
```url
http://DOMAIN/admin/{Controller}/add
```
* 模板文件名必须为```info.html``` 。
##### 一、重写添加渲染页面
```php
__addDisplay():Response
```
* 重写渲染页面,返回```Swoft\Http\Message\Response``` 对象
```php
__addUpdateBefore(array $requestParams):bool
```
* 重写插入数据方法,用于自行写入数据库操作
* 返回```boolean```值用于判断是否执行成功
### 2.2 修改页面
```url
http://DOMAIN/admin/{Controller}/edit/?id={index_id}
```
* 模板文件名必须为```info.html``` 。
* 请求id必须为主键id
```php
__editUpdateBefore(array $requestParams):bool
```
* 重写插入数据方法,用于自行更新数据库操作
* 返回```boolean```值用于判断是否执行成功
##### 一、重写修改渲染页面
```php
__editDisplay(array $info):Response
```
* ```array $info```主键查询结果数组。
* 重写渲染页面,返回```Swoft\Http\Message\Response``` 对象
### 2.3 添加/修改数据
#### 添加数据
```url
http://DOMAIN/admin/{Controller}/add
```
添加数据模板name字段必须跟mysql表字段对应。
#### 修改数据
```url
http://DOMAIN/admin/{Controller}/edit
```
修改数据必须提交带有主键ID的值
#### 添加/修改前置方法
```php
__{add/edit}Before(array $request):array
```
* ```array $request``` 提交的参数值
* 必须返回```array```类型参数
#### 添加/修改后置方法
```php
__{add/edit}After(Mix $result):Response
```
* ```mix $result``` 数据库提交、更新结果
* 必须返回```Swoft\Http\Message\Response```对象
## 三、快捷删除
```url
http://DOMAIN/admin/{Controller}/del{/?id=}
```
* id参数可以get/post提交,id为表主键
* 该方法为硬删除(不保留数据)
#### 前置方法
```php
__delBefore(array $map):$map
```
* ```array $map```符合swoft ORM条件的数组
* 返回符合swoft ORM条件的数组
#### 后置方法
```php
__delAfter(Mix $result):Response
```
* ```mix $result``` 数据库提交、更新结果
* 必须返回```Swoft\Http\Message\Response```对象
## 四、导出到excel
添加导出按钮
```html
```
### 配置
在需要导出的类中添加配置
```php
protected $output=[
["字段名称","excel标题名称",{['为true字段','为false字段']}],
];
```
* 第1个值为在mysql中的字段名称
* 第2个字为在excel中标题的名称(需要跟第一个值一一对应)
* 第3个为选填值,该值为条件值,需要修改字段在excel中的展示值(如 status=1 ,那么第三个字段写成['开启', '禁用'])
#### eg
```php
protected $output=[
["admin_id","id"],
["admin_username","用户名"],
["created_at","创建时间"],
["admin_bs","状态",['启用','禁用']],
["admin_nickname","昵称"],
["group_name","所属组"],
];
```
Swoft is an open-source software licensed under the [LICENSE](LICENSE)
power by ethan[touch_789@163.com] [LICENSE](LICENSE)