thinkphp admin 顾名思义,就是基于thinkphp的一个后台管理框架啦。为什么叫后台管理框架呢?因为它没有前台,只有后台。而且它的设计,是从一个系统的角度出发去做的。它可以帮你解决后台的快速搭建问题,让你更专注去写业务逻辑,而非系统逻辑。
1 数据库安装
在代码包里,有个目录叫database,它里面有两个sql文件,是用来初始化tpa数据库的,是tpa的基本数据库结构。当然,你可以根据自己的业务需要进行扩展。
2 配置修改
在系统目录下,有一个config.php文件,里面有核心的配置项,都写好了注释,看应该就可以看懂了。其中,有一些选项是必须
3 部署
把所有代码上传到服务器上,将public_html目录作为网站访问的根目录。注意,网站必须对系统目录有可访问权限,否则无法加载系统程序。当然,最好还有可写权限,因为缓存、运行时等都要写入文件。
你需要在配置文件中绑定一个域名到Admin模块,访问这个模块就可以看到登陆界面。登陆初始化用户是administrator密码是123456.
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",这样,链接页面的所有内容都会被输出(要注意不要输出<!doctype>,这些标签)。
后台加载了一些重要的插件,第一个是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