# thinkphp-admin **Repository Path**: ExceptionERROR/thinkphp-admin ## Basic Information - **Project Name**: thinkphp-admin - **Description**: 基于ThinkPHP的后台系统,简洁UI、层级菜单、权限管理,便于开发的表单和模型框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-30 - **Last Updated**: 2023-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # thinkphp-admin thinkphp admin 顾名思义,就是基于thinkphp的一个后台管理框架啦。为什么叫后台管理框架呢?因为在开发它的时候,没有开发前台,只有后台。而且它的设计,是从一个系统的角度出发去做的。它可以帮你解决后台的快速搭建问题,让你更专注去写业务逻辑,而非系统逻辑。前台则利用后台的功能,由开发者自己决定如何管理,甚至可以没有前台,只提供api接口。 ## 安装 1 数据库安装 在代码包里,有个目录叫database,它里面有两个sql文件。tpa-structure.sql是用来初始化tpa数据库结构的,当然,你可以根据自己的业务需要进行扩展。admin.sql是初始化数据,包含了后台一些基础的数据包。通过phpmyadmin等工具,先导入tpa-structure.sql,再导入admin.sql。 2 配置修改 在系统目录下,有一个config-default.php文件,里面有核心的配置项,都写好了注释,看应该就可以看懂了。你可以把这个文件修改为config.php。其中,有一些选项是必须的: > 数据库配置信息 > 修改为你自己的值:AUTH_SALT_KEY、APP_SALT_KEY,这两个值是用来做用户登录、权限等相关信息的加密使用的,所以非常重要,必须修改 > 修改url信息,path信息一般不用改 另外,超级管理员administrator的密码逻辑是这样的:如果在Application/Admin/Conf/config.php中设置了ADMINISTRATOR_PASSWORD,就用这个密码登录,如果设置为空值,则使用数据库中的密码信息。这个设计主要是为了在迫不得已的情况下可以重置超级管理员的密码,通过这里设置一个强制密码后登录后台,在后台“资料修改”中修改超级管理员密码,然后再重新将这个值设置为空即可使用数据库中的新密码。 3 部署 把Application、public_html、ThinkPHP、config-default.php、load.php上传到服务器上,将public_html目录作为网站访问的根目录。也就是说,你的域名得绑定到public_html目录,但是域名访问的网站得对上一级目录有可写权限,要实现这一点你可能得了解一下apache的配置。之所以要有这个可写权限,是因为缓存、运行时等都要写入文件。 ## 使用 虽然你按照上面的步骤已经可以登录后台了,但是你会发现后台啥都没有,顶上只有两个菜单。这是正常的,因为你的域名跟我初始化的时候使用的域名不一样,需要按照下面的操作。 1 菜单和权限 tpa后台菜单即是权限管理基础。当你登陆到后台之后,进入“设置-菜单管理”,可以添加修改菜单,我们只是实现了最基础的菜单功能,而没有做的更好,是希望你可以自己有更大的定制空间。当然,如果你嫌麻烦,完全可以不用再处理了。添加修改菜单之后,到“用户-管理员组”中进行菜单访问权限的授权,然后需要点击顶部导航右侧的“清空缓存”。 菜单即权限是我看过的几个基于thinkphp的框架的做法,所以我也采用了这种做法。但是为了解决一些冲突问题,增加了隐藏功能。比如有一个操作是用来上传文件的,但是这个上传地址没有必要在菜单中显示,所以选择隐藏就可以解决这个问题。 开发中,如果你要在后台增加一个管理菜单,首先第一步是到菜单中添加菜单,其次到管理员组中授权,再次才是编写菜单URL对应的控制、方法、视图。 **权限**:权限问题稍微有点复杂。权限是由用户组来决定的,在“用户”菜单下面,有个“管理员组”,里面可以设置每一个组的权限。一个管理员必须属于一个管理员组,而这个管理员组又对应有一些权限,所以这个管理员也就有了这些权限。超级管理员的权限也受到所在管理员组权限的制约,所以你安装好之后,得到后台的“管理员组”中重新设置一下权限,然后“清空缓存”,再刷新页面,就可以看到权限列表中你勾选的那些菜单了。 2 继承 tpa采用了多级继承的方法。首先是Common模块中的Controller/BaseController,是整个系统的根控制器,以后你开发Home、Api模块,都要去继承这个控制器。怎么继承?很简单啊 ``` namespace Home\Controller; use Common\Controller\BaseController; class HomeController extends BaseController {} ``` 就是这么简单。为什么要继承呢?因为BaseController可以帮你解决一些垮模块的操作定义,比如uploadPicture,几乎所有的模块都会用到图片上传。还有就是,在BaseController中我们提供了SETCONFIG()操作,可以初始化由后台添加的配置项,并且在``_initialize``中就已经调用了,在所有继承的控制器中,不用写``_initialize``或者写``_initialize``时执行``parent::_initialize();``就可以初始化配置。 第二个需要继承的,就是每个模块下的``__Controller``,为什么要取这么怪异的控制器名字呢?因为以``__``开头的控制器无法通过url进行访问,所以我们在每个模块中先创建一个``__Controller``,并且在这个控制器中继承BaseController,并且在这个控制器中写入各种鉴权判断,或者protected方法给其他子类共享。具体你可以去研究一下我写的Admin模块中的其他控制器。 3 后台视图 后台采用了极简风格,这些界面采用了非常少的样式和脚本。首先是列表,列表统一采用来列出,效果就是我们在后台看到的。然后是弹出层实现新增和编辑。 新增和编辑可以采用两种模式打开,一种就是普通的url跳转,还有一种是弹出层中打开。他们的区别在于链接到他们的url的标签,是否含有btn-dialog的class。在弹出层中打开一个页面,但是跟我们这里的新增和编辑没有关系的,可以在标签上增加class="open-in-dialog",这样,链接页面的所有内容都会被输出(要注意不要输出,这些标签)。 后台加载了一些重要的插件,第一个是dialog.js中的dialog相关方法。page.js中的ajaxPage,它主要用于弹出层,实现ajax加载页面。第二个是form.js中的ajaxSubmit,主要用于静态提交表单。接下来是HHuploadify,主要用于图片上传。colorpicker用于颜色拾取。datetimepicker用于时间选取。Tinymce是编辑器组件。powertip用于弹出界面上哪些黑色的提示,每到遇到错误的时候,tip就会冒出来。swiper是我最常使用的图片轮播插件。 4 写最少的视图 在每个控制器中,使用一个protected $form来实现新增、编辑页的表单。由于表单控件不同,我们只需要在$form中做不同的规定,就可以选择使用不同的view来渲染。这个功能很难解释,但你一定要学会使用,所以,你一定要去看下每个控制器中$form的实现方法。 发布原址:http://www.tangshuang.net/2306.html