# symfony_dry
**Repository Path**: xxfaxy/symfony_dry
## Basic Information
- **Project Name**: symfony_dry
- **Description**: 该项目帮您把后台开发中一般都会有的基础功能都做好了,如果需要增加其他功能,我们提供了非常便利的一整套服务,使得您开发一个功能的增、删、改、查、搜索等只需要10分钟的时间,如果您熟悉了该项目的特性,时间会更短
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: https://www.zhouchun.net
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 0
- **Created**: 2017-08-17
- **Last Updated**: 2024-10-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
### 在线演示
地址 http://23.91.101.185:10086
用户名 super
密码 111111111(9个1)
### 该项目能做什么
该项目帮您把后台开发中一般都会有的基础功能都做好了,如果需要增加其他功能,我们提供了非常便利的一整套服务,使得您开发一个功能的增、删、改、查、搜索等只需要10分钟的时间,如果您熟悉了该项目的特性,时间会更短
我们不希望您在后台开发上花费更多精力,而应该把时间花在具体的业务逻辑上
我们不希望您重复地读取数据库或者配置文件然后通过循环的方式生成单选、多选、下拉表单等,而应该在模板里一句代码就搞定,就像下面这样
```
{{ make_choice('status')|raw }}
{{ make_choice('status', 值)|raw }}
```
我们致力于降低symfony框架的学习难度,同时又不损失高并发、高性能的优点
我们适度封装了操作数据库的服务,使得您用起来得心应手,您不必考虑有sql注入的风险,我们在底层帮你做好了防范,您可以看下这个控制器里的代码十分简洁
[点击查看](https://gitee.com/xxfaxy/symfony_dry/blob/master/code/src/Xxfaxy/DryBundle/Controller/UserPermissionController.php)
### 介绍
1.该项目依赖如下软件
linux
nginx
docker(可选)
docker-compose(可选)
php(7.0版本)
mysql(支持其他数据库需要稍作修改)
redis(可选)
2.该项目主要是`symfony`(2.8.27版本)和`INSPINIA - Responsive Admin Theme`(收费软件)的整合
`symfony`官网http://symfony.com
`INSPINIA - Responsive Admin Theme`购买地址http://wrapbootstrap.com/preview/WB0R5L90S
3.该项目默认使用`docker`作为运行环境,如果您不想使用`docker`,`code`目录里就是项目代码,`common/nginx.conf`是`nginx`的配置,请自己修改
4.该项目如果把我写的文档吃透了,难度会比其他框架低很多,而且开发效率也会提升数倍
### 准备工作
1.如果使用docker(推荐),只需要自己安装好docker和docker-compose即可
2.如果不使用docker,需要自己安装好nginx、php、mysql、redis、composer等软件
### docker方式搭建mysql和redis服务
1.mysql的docker-compose.yml写法
```
version: "2"
services:
mysql_server:
image: xxfaxy/3-mysql-server:5.7
container_name: mysql_server
ports:
- "3306:3306"
volumes:
- /home/zc/data/disk/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
restart: always
```
2. redis的docker-compose.yml写法(可以先跳过)
```
version: "2"
services:
redis6379:
image: xxfaxy/self-alpine-redis
container_name: redis6379
ports:
- "6379:6379"
volumes:
- "/home/zc/data/disk/redis/redis6379:/data"
restart: always
```
### 项目运行
1.将`database/symfony_dry.sql`导入mysql数据库`symfony_dry`
2.修改`docker-compose.yml`里面的数据库配置,数据库ip地址`不能`写`127.0.0.1`这样的地址,应该写局域网ip地址,把`SYMFONY__CRUD__CACHE__USE`设置为`false`就不依赖`redis`了
3.进入`code`目录后解压`vendor.tar.gz`
4.在项目根目录运行`./local.sh`,然后输入5,创建镜像
5.在项目根目录运行`./local.sh`,然后输入3,删除容器,如果是第1次运行请忽略错误
6.在项目根目录运行`./local.sh`,然后输入6,运行容器
7.在项目根目录运行`./local.sh`,然后输入8,进入容器,然后在容器里面运行`./tool`,输入1清除缓存
8.浏览器访问`http://127.0.0.1:10008`,输入用户名super,密码111111111(9个1)即可登录后台
### 功能
1.登录用户更改密码
登录后的用户可以更改自己的密码
2.用户组管理
就是用户组的增删改查
3.用户组权限分配
给用户组分配相应的权限
4.用户管理
就是用户的增删改查
5.用户模拟登录
不需要知道用户密码,就可以登录任意用户
6.用户组权限
查看用户组分配到的权限
7.菜单管理
后台的菜单通过菜单管理来动态管理,支持3级菜单
8.设置管理
就是一个键一个值这样的记录管理,可以用来配置网站名称、关键字、电话、电子邮箱等
控制器写法
```
$function = $this->get('service.common.function');
$setting = $function->getSetting();
$oaName = $setting->oa_name;
```
twig模板写法
```
{{ call_method('setting', 'oa_name')|raw }}
```
其中第2个参数就是相应的键值
9.选项管理
给单选、多选、下拉表单提供数据源,如`status`键的值如下
```
[
{"status":"1","key":"1","value":"启用","note":""},
{"status":"1","key":"0","value":"禁用","note":""}
]
```
控制器写法
```
$function = $this->get('service.common.function');
$status = $function->getChoice('status');
```
twig模板写法
```
get_choice('status')
```
10.选项配置管理
主要就是用来配置如何重复利用选项管理的数据源及表键值配置的表数据源,快速生成`水平单选` `水平多选` `垂直单选` `垂直多选` `单选下拉` `多选下拉`等表单
twig模板写法
```
{{ make_choice('status')|raw }}
{{ make_choice('status', 值)|raw }}
```
其中第2个参数是编辑数据时数据库保存的值,用来选中之前的选项,如果是多个值,用逗号分割,如'1,2'
上面的写法会自动生成如下代码
```
```
原理很简单,先从`dry_choice_config`表找到`dry_key`字段值为`status`的记录,然后拿到`dry_choice`字段的值,刚好也是`status`(记为A),然后从`choice`表找到`dryKey`字段值为`status`(前面的A)的记录,利用里面的数据源生成单选表单
如果`A`的值以`@`符号打头,表示要从表调取数据,如A为`@language_for_permission`,这个时候就与表`choice`没有关系了,它会去`dry_table_key_value`表找到`dry_alias`字段值为`language_for_permission`的记录,然后根据里面的配置知道如何调用表数据,从而生成下拉表单
11.表键值管理
用来配置单选、多选、下拉表单等如何从表调取数据
假设有如下的配置
```
表 dry_language
key字段 dry_key
value字段 dry_key
排序语句 dry_sort asc
```
根据配置会拼接sql语句为`select dry_key as k,dry_key as v from dry_language order by dry_sort asc`,该语句返回的数据有两个字段`k`和`v`
假设数据如下
```
[
{"k":"1","v":"启用"},
{"k":"0","v":"禁用"}
]
```
则生成下拉的话会是这样的结构
```