/Phpcmf/Table用于快速实现数据表的显示、增加、修改、删除等动作,适用于任何数据表的显示和操作。
一、示例说明
例如需要在增加一个资料表,用于录入资料数据,那么可以使用Table类快速实现数据的储存和显示。
1、下载Demo程序示例
A、入门级别的Demo(推荐)
B、进阶级别的Demo
解压之后放到 dayrui/App目录之下,如下图所示
2、创建数据库,我们示例只做数据标题和数据内容的录入
- CREATE TABLE `dr_test` (
- `id` int(11) NOT NULL,
- `title` varchar(255) NOT NULL,
- `content` text NOT NULL,
- `inputtime` int(11) NOT NULL
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- ALTER TABLE `dr_test`
- ADD PRIMARY KEY (`id`);
- ALTER TABLE `dr_test`
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
3、界面预览,admin.php?s=test&c=test,即可看到以下界面:
这样就可以利用Table类进行增加、删除、修改操作,根本不需要开发者写多余的sql查询语句,Table类已经帮您处理好了。
二、解析Table类源码
1、构造函数初始化方法
- public function __construct(...$params)
- {
- parent::__construct(...$params);
- // 表单显示名称
- $this->name = dr_lang('资料数据');
- // 模板前缀(避免混淆)
- $this->tpl_prefix = 'test_';
- // 入库字段,实例中用到两个字段录入
- $field = array(
- 'name' => array(
- 'ismain' => 1,
- 'name' => dr_lang('名称'),
- 'fieldname' => 'name',
- 'fieldtype' => 'Text',
- 'setting' => array(
- 'option' => array(
- 'width' => 200,
- ),
- 'validate' => array(
- 'required' => 1,
- )
- )
- ),
- 'content' => array(
- 'ismain' => 1,
- 'name' => dr_lang('资料内容'),
- 'fieldtype' => 'Ueditor',
- 'fieldname' => 'content',
- 'setting' => array(
- 'option' => array(
- 'mode' => 1,
- 'height' => 300,
- 'width' => '100%'
- ),
- 'validate' => array(
- 'required' => 1,
- )
- )
- ),
- );
- // 初始化数据表
- $this->_init([
- 'table' => 'test', // 表的名字
- 'field' => $field, // 设置入库字段
- 'show_field' => 'title', // 表的主字段
- 'order_by' => 'id desc', // 列表排序显示方式
- ]);
- \Phpcmf\Service::V()->assign([
- 'field' => $field,
- 'menu' => \Phpcmf\Service::M('auth')->_admin_menu(
- [
- $this->name => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/index', 'fa fa-tag'],
- '添加' => [APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/add', 'fa fa-plus'],
- '修改' => ['hide:'.APP_DIR.'/'.\Phpcmf\Service::L('Router')->class.'/edit', 'fa fa-edit'],
- ])
- ]);
- }
关于初始化数据表的_init方法提供以下参数参考:
- table 查询主表
- field 可用搜索字段列表
- date_field 列表搜索的时间字段,默认inputtime
- show_field 显示主字段,用于修改日志
- list_field 列表显示字段
- order_by 默认排序方式
- order_list 默认排序方式(同上一样)
- where_list 默认搜索条件,每次列表都执行
- join_list 关联查询,格式:['member', 'member.id=admin.uid', 'left']
- select_list 列表查询筛选字段
2、数据列表方法
- public function index() {
- list($tpl) = $this->_List(); // 完成table自动查询并分页显示动作
- \Phpcmf\Service::V()->display($tpl); // 设定显示模板
- }
3、数据增加方法
- public function add() {
- list($tpl) = $this->_Post(0); // 0表示新增post数据
- \Phpcmf\Service::V()->display($tpl);// 设定表单模板
- }
4、数据修改方法
- public function edit() {
- // 传入id到post方法表示修改此id提交的数据
- list($tpl) = $this->_Post(intval(\Phpcmf\Service::L('Input')->get('id')));
- \Phpcmf\Service::V()->display($tpl);
- }
5、数据删除方法
- public function del() {
- $this->_Del(
- \Phpcmf\Service::L('Input')->get_post_ids(), // 获取批量删除id号
- null, // 删除之前的函数验证
- null, // 删除之后的函数处理
- \Phpcmf\Service::M()->dbprefix($this->init['table']) // 设定删除表名称
- );
- }
6、数据存储格式化方法
- // 格式化保存数据
- protected function _Format_Data($id, $data, $old) {
- if (!$id) {
- // 当提交新数据时,把当前时间插入进去
- $data[1]['inputtime'] = SYS_TIME;
- }
- return $data;
- }
7、数据存储验证及判断
- protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) {
- return parent::_Save($id, $data, $old, function($id, $data, $old){
- // 保存之前执行的函数,并返回新的数据
- if (!$id) {
- // 当提交新数据时,把当前时间插入进去
- $data[1]['inputtime'] = SYS_TIME;
- }
- return dr_return_data(1, null, $data);
- }, function ($id, $data, $old) {
- // 保存之后执行的动作
- });
- }
如果不写此方法的话就不会对数据进行格式化操作,按照提交表单原样储存
文档最后更新时间:2018-01-15 15:37:49