grape动态PHP结构(二)——管理后台

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

 一、概述

1)indexController.php中写了些简短的demo,引用dao层、调用rpc、测试调用等。

2)publicController.php中记录的是不需要登录的操作,目前是登录与退出操作。public/login是登录地址,用户名是admin,密码是123456

3)userController.php做了列表(user/lists)和表单(user/add)页面的demo,就是下图中的用户列表和添加用户

4)如上图的目录结构所示,library/dao中,编写了一些数据操作的demo,可满足简单的增删改查

5)如上图的目录结构所示,library/helper/dict中,放置了些静态常量和数据字典,例如ajax请求状态码、api中不需要登录的页面、后台不需登录的地址等

6)相关代码编辑可以查看《开发流程介绍

 

二、入口文件

入口文件都放在public文件夹下面,静态资源也放在这个位置,后台管理在admin中,静态效果可参考grape-skin的文档。

 

三、app文件,视图与控制器

1)conf,配置

conf中配置了站点URL,控制器文件后缀名、Action函数名称后缀、module白名单等参数,拦截器配置。这几个配置都是根据InitPHP设置的,点击查看InitPHP配置

/**
 * 站点URL配置
 * 必选参数
 */
$InitPHP_conf['url'] = 'http://admin.grape.net/';

 

2)controller,控制器

由于是后台管理,所以我就没用模块了,控制器文件都是直接在controller文件夹下面。可参考InitPHP中的Controller控制层使用

1.控制器都会继承adminController类,在这个类中做了些请求验证、不同的模版设置,ajax返回数据统一结构,分页代码配置,通用功能方法,session保存等

2.对于传过来的参数都会做些验证,查看InitPHP安全基础

protected function p($key, $isfilter=true, $type=null) {
     return $this->controller->get_gp($key, $type, $isfilter);
}

3.只有在$initphp_list数组中设置了的,才算是一个action,才可通过域名访问

4.验证包括post请求做限制判断、CSRF风险控制与登录验证等

5.左边菜单可以做权限设置,我现在这边是写死的,菜单字典写在了library/helper/dict/enumHelper中的$admin_menu

6.widgetController.php文件中可以放置一些脚本插件的服务器逻辑,例如编辑器中图片上传,普通的图片上传。顺便说下图片我是单独做了张bc_image表,上传的图片都会记录到这张表中

7.为了能在左边菜单中有选中的效果,命名做了些限制,例如左边菜单中action的名字为module,那么在这个菜单下面的子菜单就得以module为开头了,比如moduleadd

Controller类的大致代码如下:

/**
 * 不需要登录的操作
 * @author pwstrick
 *
 */
class publicController extends adminController {
    /**
     * action列表
     */
    public $initphp_list = array('login', 'ajaxlogin', 'logout');
    
    /**
     * 登录
     * @author pwstrick
     */
    public function login() {
        $this->publicTemplate('登录');
        $this->view->display('public/login');
    }
}

 

3)template,视图

这里是放视图文件的,视图也根据了InitPHP的规则,查看InitPHP视图文档

1.layout中,放的是模版文件,目前是有三套模版,每个模版分为header和footer,不需要登录的、需要登录的和弹出层的页面

2.public是摆放未登录的,目前就一个login登录

3.comform.htm是用来展示php编写表单的视图,也就是用php来写html代码。form.htm中只有一个变量,用于echo的。

4.php编写html代码,文件主要放在formHelperadminHelper中,顺便说下adminHelper会在adminController的特定条件下引入,formHelper是根据CI中的form_helper代码改写的,封装了些常规标签如p、span、select等,也封装了些grap-skin中的美化控件,以及一些第三方脚本插件,具体可以查看代码

5.如上图的目录结构,helper中的view文件夹下放的就是php编写html代码,在里面写了两个demo,引用的话如下:

InitPHP::getHelper('view/user');

6.大部分规则页面就可以通过php代码来编写控件,但有些特殊页面不能这么来了,这个时候可以把html代码直接写在视图中,例如user文件夹下的layer.htm

 

4)data,动态可写文件目录

1.filecache:文件缓存目录

2.template_c:视图文件经过一次编译后,变成php后缀的文件,保存在这里

 

5)interceptor,拦截器

拦截器中我做了个简单的demo,查看InitPHP拦截器的文档

在里面我就做了个性能分析的记录,仅作演示。

/**
     * 前置拦截器,在所有Action运行全会进行拦截
     * 如果返回true,则拦截通过;如果返回false,则拦截
     * @return boolean 返回布尔类型,如果返回false,则截断
     */
    public function preHandle() {
        $config = InitPHP::getConfig();
        if($config['is_xhprof']) {
            xhprof_enable();
        }
        return true;
    }
    /**
     * 后置拦截器,在所有操作进行完毕之后进行拦截
     */
    public function postHandle() {
        $config = InitPHP::getConfig();
        if($config['is_xhprof']) {
            $xhprof_data = xhprof_disable();
            $xhprof_runs = new XHProfRuns_Default();
            $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo");
        }
    }

 

四、initphp库文件修改

1)initphp.php:

初始化的时候自动载入了部分文件

self::_autoload();//加载必须的文件

新增了几个dao层引用函数如下

/**
     * 引入mongo的dao数据
     */
    public static function getMongoDao($daoname, $path = 'mongo') {
        return self::getDao($daoname, $path);
    }
    /**
     * 引入cache的dao数据
     */
    public static function getCacheDao($daoname, $path = 'cache') {
        return self::getDao($daoname, $path);
    }
    /**
     * 引入mysql的dao数据
     */
    public static function getMysqlDao($daoname, $path = 'mysql') {
        return self::getDao($daoname, $path);
    }
    /**
     * 引入全文检索的dao数据
     */
    public static function getSearchDao($daoname, $path = 'search') {
        return self::getDao($daoname, $path);
    }

Dao基类的初始化也做了修改修改,代码如下:

/**
     * 初始化
     */
    public function __construct() {
        $this->dao = $this->load('dao', 'd'); //导入D
        $this->dao->run_db(); //初始化db
        $this->dao->run_cache(); //初始化cahce
        $this->dao->run_nosql(); //初始化nosql 默认是mongoDB
        $this->dao->run_search(); //初始化search
    }

 

2)dao文件夹中新增全文检索,search文件

db文件夹中新增,dbexpr.init.php用于MySQL的一些特殊情况,例如下面的更新浏览数,将read_num作为语句的一部分,而不是一个变量出现在语句中

/*
     * 更新浏览数
     */
    public function updateRead() {
        $row = array(
            'create_time' => time(),
            'read_num' => new dbExpr('read_num+1')
        );
        $where = array(
            'uid' => 10000008
        );
        return $this->update($row, $where);
    }

 

3)library文件夹中

1.修改了分页类,pager.init.php,从CI框架中扣过来的,并做了些改写,pager2.init.php是原来的。

2.新增weixin.init.phpweixinpay.init.php类文件,分别是微信接口和微信支付。关于这两个类可以参照另外一个系列文章《微信公众平台开发

 

五、library类库

library中存放了通用控制器、数据层逻辑、帮助函数、服务层逻辑、简单测试与第三方类库。

这个结构原先是放在app中的,现在我单独独立出来,就是为了能多个相关项目逻辑通用。

1)controller

这里先讲解adminController文件

1.多个验证,保证访问的安全

2.获取用户session的user方法,并可获取某个属性

3.获取传过来的参数方法p,get和post都可以,并能做过滤

4.模版设置方法publicTemplatemainTemplatemainListTemplatemainFormTemplatelayerTemplate

5.ajax返回参数方法ajaxSuccessOutput(请求成功)、ajaxFailureOutput(请求失败)

6.分页配置方法alternate

7.获取页码方法pageNo

 

2)dao

1.cache是缓存

这里操纵的是memcache,这里推荐一款管理cache小工具,我已经放在了tool文件中。查看InitPHP中cache文档

2.mongo是操作MongoDB的文件集合

在abstract文件中封装了一些通用的操作,例如查询一条记录、多条记录、分页、更新、插入等。memberDao有一些demo示例。

注意文件夹夹的起名,例如bi/visitDao.php,类的名字就是visitBiMongoDao,Dao在最后,然后是名字+文件夹目录,这是为了保证类名的唯一性,所以定了个规则。

wx放置的是与微信相关的数据类,基本都是些日志或请求返回的数据缓存等

3.mysql是操作MySQL数据库的

里面也有个abstract,类中也封装了通用的操作,与mongo中的差不多。类的名字的规则也一样。点击查看InitPHP中Dao操作memberDao同样有demo示例。

4.search是全文检索

目前里面就写了点demo,没有做更多的封装

 

3)helper

1.dict中存放的是数据字典,静态常量、静态数组字典等。例如密码混淆码常量、后台菜单字典等

2.view中存放php编写的html代码,对应app/xx/controller中的各个action

3.adminHelper(后台控件封装)formHelper(表单控件封装)urlHelper(url地址操作)。参照CI中的helper文件,这几个就是函数集合,里面并没有类

 

4)service

一些通用的逻辑其实可以写在这里的。InitPHP中service的功能不仅仅如此。还可以用作RPC调用

rpc的配置文件写在了public中,如下图所示,可以单独配置个二级域名做引用,也可以共用。

配置如下:

$InitPHP_conf['customer'] = array(
    "admin" => array( //可以进行分组
        "host" => array("admin.grape.net"), //服务提供者所在的服务器的IP地址,一般是内网IP地址。可以填写多台服务器
        "file" => "rpc.php" //访问服务的入口文件,例如加上IP地址:http://localhost/rpc.php
    )
);

引用如下:

public function rpc() {
        $ret = InitPHP::getRemoteService("user", "getUser", array(), 'admin');
        print_r($ret);
}

 

5)test

InitPHP中定义的test,是用来测试应用的Service接口代码的。如果改造改造的话,还能做很多地方的测试。

示例代码的引用,写在了index/unittest中。

 

6)third

第三方库文件,目前放了个性能工具xhprof,将来还可以放支付宝库文件,OSS库文件,短信库文件,Excel操作库等等

 

 

GitHub地址:

https://github.com/pwstrick/grape



    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/4805235.html,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
PHP 开发者
PHP中的命名空间:优雅解决代码冲突与组织结构
在PHP开发中,命名空间是一种重要的工具,可以帮助开发者避免代码冲突、提高代码组织结构和可读性。本文将深入探讨PHP中命名空间的概念、使用方法以及实际应用场景,帮助读者更好地理解和运用命名空间来优化他们的PHP代码。
|
17天前
|
安全 关系型数据库 MySQL
PHP手术麻醉临床信息管理系统源码 术前、术中、术后全流程管理
麻醉文书是用于管理患者手术全过程的文书。 麻醉同意:医院麻醉知情同意书的填写和编辑; 病案查询:可以通过搜索框搜索患者查询病案; 申请手术:手术申请单的填写和打印; 风险评估:医院手术风险评估表的书写和编辑。
46 0
|
10天前
|
存储 关系型数据库 MySQL
PHP的基本语法和结构
【5月更文挑战第22天】PHP的基本语法和结构
6 2
|
17天前
|
存储 安全 前端开发
PHP医院安全不良事件管理系统源码(AEMS)前端vue2+element+后端laravel8不良事件上报与闭环管理
医院不良事件上报与管理系统结合现代医院管理思路,遵照PDCA全面质量循环管理方法而设计,并在多家大型三甲医院成熟运用。系统从事件上报、基于人、机、料、法 、环的RCA分析、事件整改、效果评估实现了结构化、标准化、智能化的管理和分析,满足医院可追溯化、全流程闭环管理要求,满足等级医院评审细则要求,大力提高医院不良事件上报的效率,保障事件分析的准确性,促进医疗安全的提高,避免同类事件再次发生,改善整个医院医疗安全,从而实现医院安全医疗的目标。
29 3
|
17天前
|
监控 安全 前端开发
PHP基于B/S版 医院不良事件管理系统源码vscode+laravel8医院如何加强不良事件上报系统的管理 AEMS系统源码
医院安全(不良)事件管理AEMS系统构建全院人员,在医疗、环境、设备、服务及相关制度体系运行过程中,发现存在的不良、隐患事件,能够以匿名、实名方式主动、方便、快捷的上报、反馈。
35 6
|
17天前
|
监控 安全 PHP
采用PHP开发的不良事件管理系统源码vue2+element医院不良事件上报系统的意义 AEMS系统源码
不良事件管理系统(AEMS)是一种用于医疗行业的解决方案,它主要用于处理和管理临床不良事件。这些不良事件是指由医疗导致的伤害,与疾病的自然转归相反,可能延长病人的住院时间或导致残疾。AEMS的目标是揭示系统的不足与缺陷,减少不良事件对病人、家属、医护人员和医院声誉的影响。
29 1
|
17天前
|
存储 缓存 安全
【PHP开发专栏】PHP Cookie与Session管理
【4月更文挑战第30天】本文介绍了PHP中的Cookie和Session管理。Cookie是服务器发送至客户端的数据,用于维持会话状态,可使用`setcookie()`设置和`$_COOKIE`访问。Session数据存于服务器,更安全且能存储更多数据,通过`session_start()`启动,`$_SESSION`数组操作。根据需求选择Cookie(跨会话共享)或Session(单会话存储)。实战中常组合使用,如Cookie记住登录状态,Session处理购物车。理解两者原理和应用场景能提升Web开发技能。
|
17天前
|
存储 缓存 PHP
【PHP开发专栏】PHP文件操作与目录管理
【4月更文挑战第30天】本文介绍了PHP中的文件操作和目录管理。内容涵盖文件的打开、关闭、读写、删除及状态检测,如`fopen`、`fclose`、`fread`、`fwrite`、`file_get_contents`等函数。此外,还涉及文件高级操作如锁定和指针操作。在目录管理方面,讲解了创建、删除目录及读取目录内容的函数,如`mkdir`、`rmdir`、`scandir`等。通过示例代码展示了如何在实践中应用这些函数。理解这些基础知识对处理文件系统相关问题至关重要。
|
17天前
|
存储 监控 安全
采用php vue2 开发的一套医院安全(不良)事件管理系统源码(可自动生成鱼骨图)
医院安全(不良)事件管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,以事件为主要对象,可以自动、及时、实际地发现医院的安全、不良、近失事件的情况,更好地掌握不良事件的发生趋势,为及时采取适当的管理措施和流程、制度改进提供了良好的量化依据。通过汇集不同类型事件的报告,从中分析出医院内部潜在的问题和风险,将发生的事故降到最低,从而保证病人安全和医护人员安全。
19 0
|
10月前
|
小程序 前端开发 JavaScript
小程序轮播图的两种后台方式(PHP)--【浅入深出系列008】
小程序轮播图的两种后台方式(PHP)--【浅入深出系列008】 这是我的CSDN 的文章 转过来,可能有些许错误。请留言