自研php的仿java的ssh框架(php框架 hyperf)
ccwgpt 2024-11-03 12:30 75 浏览 0 评论
简介
前段时间写javaweb,发现ssh框架里的s标签很好用,但java代码写起来太慢了,入口和配置文件都过于繁琐,而且s标签只有固定的那几种。于是想用php模拟一下javaweb的ssh框架,顺便加些轮子比如文本编辑器,验证码,防xss攻击等进去,减少代码量而又不失可读性。
版权
辽宁工程技术大学新起点工作室版权所有,项目地址:https://github.com/similing4/php-ssh 转载请注明版权与出处!
框架流程
本框架入口文件为index.php,调用过程如图:
使用方法
调用mod:
index.php?mod=Mod名称
Mod文件格式:放在Mod文件夹下,文件名要求大写并能表名Mod功能
<?php
调用Action
Controller::doAction(“Action类名”,”Action方法名”,封装后的参数);
Controller.php?action=Action类名&method=Action方法名
注:调用Action限定只在mod或URL中调用,您可以将URL调用关闭,关闭方法:将Controller.php中
if(isset($_GET['action'])&&isset($_GET['method'])){
段注释掉
Action文件格式:Action是一个静态类,类名要求规则与Mod相同。不过Action要求放在Action文件夹下且Action名与类名要求一致:
<?php
调用Service
Controller::doService(“Service类名”,”Service方法名”,封装后的参数);
注:调用Service限定只在Action中调用
Service文件格式:Service同Action一样也是一个静态类,类名要求规则与Action相同。不过Service要求放在Service文件夹下:
<?php
DB类
本类主要用于调用数据库。
在Dao文件夹中创建任意DaoObj类,命名要求与Action相同(同Java,类名需与文件名一致),方便在Service中import(“Dao.”.类名);调用。
调用方法:
import("Dao.类名");
DaoObj定义类结构如下:
<?php
DB类使用方法如下
DB类设置
属性:
host=”localhost”;name=”数据库用户”;
pass=”数据库密码”;table=”数据库名”;
$ut=’utf8’;
query($sql);
参数:
sql要执行的语句返回值:当sql为查询时,返回值可被用于this->db->fetch_array()的参数,否则返回是否成功。
提示:
除该方法需对参数进行防注入处理外其余增删改查方法已对单引号替换,不需要防注入。
fetch_array($query);
参数:
querythis->db->query($sql)的返回值
返回值:
如果查询结果为空或全部查完了返回false,否则返回查询的一行数据。
使用方法:
$sql="select * from users"; $query=$this->db->query($sql); while($row=$this->db->fetch_array($query)){ //...这里写处理
select_arr(name,req = array(),$like=false);
参数:
name表名req 条件数组
$like 条件是否用like
返回值:
返回查询结果数组。
使用方法:
$result=$this->db->select_arr("users"); foreach($result as $row){ //这里写处理,$row为每一行的数据,如$row['username']为改行username列的值。
select_first(name,req);
参数:
name表名req 条件数组
返回值:
返回查询结果的第一条,没有则返回false。
使用方法:
$result=$this->db->select_first("users",array( "uid"=>1
update(table,list,$tiao);
参数:
table表名list 要更改的值
$tiao 条件数组
返回值:
query结果
使用方法:
$this->db->update("users",array( "password"=>md5("admin")
fn_del(table,c);
参数:
table表名c 条件数组
返回值:
query结果
使用方法:
$this->db->fn_del("users",array( "uid"=>1
fn_insert(table,name,$arr);
参数:
table表名name 插入数据列名(可以根据该参数进行排序,如果没有可以填写”“,需要则按数组顺序填写元素,如array(“uid”,”username”))
$arr 插入行的数据
返回值:
query结果
使用方法:
$this->db->fn_insert("users","",array( "null", "admin", "adminp"
affected_rows();
返回值:影响行数
insert_id();
返回值:AUTO_INCREASE列插入的id
View中的S标签
简介:
View内放置的是前台的网页内容,所有资源应放置在res文件夹下供view调用。view输出在index.php入口文件下,因此相对路径就是入口文件所在位置。
View中可以嵌入
<?php
主要是为了防止非法访问问题。
S标签简介
我们提供了以下标签内容:
<s:iterator value="arr">
另外您可以自定义s标签,详见plugins下的S类。
解析类详见kernel下的ParseS类。
功能介绍
s:iterator 标签
属性:
value 对应全局变量GLOBALS内的指定值,要求获取的值是php的Array类型以用于遍历。范例:value=”user.uid”对应GLOBALS[‘user’][‘uid’];
您也可获取session中的内容,获取方法:value=”session.username”
s:property 标签
属性:
value 同s:iterator的value,不过要求获取的值是php的字符串或数字等可直接输出的类型。
范例:value=”user.uid” 对应 $GLOBALS[‘user’][‘uid’];
type 指定为item时,必须与s:iterator搭配,表示该iterator中的循环元素。
范例:
<s:iterator value="users">
对应php语句为
foreach($GLOBALS['users'] as $item){ echo "a"; echo $item['user']['uid']; echo "b"; echo $item['user']['username']; echo "c";
如果需要对属性进行遍历则需要如下写法:
<s:iterator value="pro">
对应php语句为
foreach($GLOBALS['pro'] as $sheng=>$shi){ echo $sheng; echo "=>"; echo $shi;//当property的value为空时其值为为当前遍历key=>value里的value。
s:if 标签
属性:
test 调用Test.php中Test类的静态方法,其它属性值作为参数传入(不能在属性中嵌入s标签),当前运行状态可以通过kernel.HookParse类获取
范例:
<s:if test="test" v="a">
等价于:
if(Test::test(array("test"=>"test","v"=>"a"))) echo $GLOBALS['user']['username']; else
s:css 标签
属性:
src css文件的名字
范例:
<s:css src="m.index" />1
等价于
<link href="assests/css/m/index.css" rel="stylesheet" type="text/css" />1
s:js 标签
属性:
src js文件的名字
范例:
<s:js src="m.index" />1
等价于
<script src="assests/m/index.js" type="text/javascript" />1
s:img 标签
属性:
src img文件的带后缀名字(可以加其他参数)
范例:
<s:img src="m.logo.png" width="100%"/>1
等价于
<img src="assests/images/m/logo.png" width="100%" />1
自定义标签
S类
简介
S类为自定义s标签插件类。当遇到不认识的s标签时,parse解释器会调用S插件内的以参数命名的方法执行其功能。每要输出一条数据时,index都会调用onText或onParamText两个参数中的一个。如果是普通文本则调用onText否则是s标签生成的就调用另一个。
S类方法命名
<s:g a="b">XXX</s:g>1
这段代码用S类拦截需要定义两个标签:
public static function g($param){//<s:g>时执行的内容,$param是属性键值对的array
如果需要对内部的内容进行控制,则需要在onText内对文本进行处理。您可以通过设置静态变量标志判断该text是不是标签内的内容。如果需要对内容内的标签进行处理,请使用kernel.HookParse类
预定义的s标签
我们已经预写了一些s标签,如:
s:checkcode标签用于显示验证码
验证码类:Service.model.ValidateCode
服务:Service.CheckCodeService
需要验证验证码可以使用Controller::doService(“CheckCodeService”,”checkCode”,验证码);方法。返回真伪值表示验证码是否正确。
s:jquery、s:tether、s:bootstrap、s:ueditor标签用于引用各前端js与css文件
相关推荐
- 用Deepseek扩写土木工程毕业论文实操指南
-
用Deepseek扩写毕业论文实操指南一、前期准备整理现有论文初稿/提纲列清楚论文核心框架(背景、现状、意义、方法、数据、结论等)梳理好关键文献,明确核心技术路线二、Deepseek扩写核心思路...
- 985学霸亲授,DeepSeek也能绘6大科研图表,5分钟就出图
-
在实验数据处理中,高效可视化是每个科研人的必修课。传统绘图软件操作复杂、耗时费力,而智能工具DeepSeek的出现彻底改变了这一现状。本文将详解如何用DeepSeek一键生成六大科研常用图表,从思维导...
- AI写论文刷屏?大学生正在丢掉的思考力
-
一、宿舍深夜:当论文变成"Ctrl+C+V"凌晨两点的大学宿舍,小王对着电脑屏幕叹气。本该三天前开始写的近代史论文,此刻还一片空白。他熟练打开某AI写作网站,输入"论五四运动的...
- Grok在辅助论文写作上能不能既“聪明”又“可怕”?!
-
AcademicIdeas-学境思源AI初稿写作随着人工智能技术的飞速发展,论文写作这一学术任务正迎来新的助力。2025年2月18日,美国xAI公司推出了备受瞩目的Grok3模型,其创始人埃隆·...
- 大四论文沟通场景!音频转文字难题听脑AI来化解
-
大四学生都知道,写论文时和导师沟通修改意见,简直是“过关斩将”。电话、语音沟通完,想把导师说的修改方向、重点要求记下来,麻烦事儿可不少。手写记不全,用普通录音转文字工具,转完还得自己慢慢找重点,稍不注...
- 论文写作 | 技术路线图怎么画?(提供经典优秀模板参考)
-
技术路线图是一种图表或文字说明,用于描述研究目标、方法和实施计划。它展示了研究的整体框架和步骤,有助于读者理解研究的逻辑和进展。在课题及论文中,技术路线图是常见的一部分,甚至是一个类似心脏一样的中枢器...
- 25年信息系统项目管理师考试第2批论文题目写作建议思路框架
-
25年信息系统项目管理师考试第2批论文题目写作建议思路框架--马军老师
- 微信购物应尽快纳入法律框架(微信购物管辖)
-
符向军近日,甘肃省工商行政管理局发布《2016年上半年信息分析报告》。报告显示,微信网购纠纷迅猛增长,网络购物投诉呈上升趋势。投诉的主要问题有出售的商品质量不过关、消费者通过微信付款后对方不发货、购买...
- 泛珠三角区域网络媒体与腾讯微信签署《战略合作框架协议》
-
新海南客户端、南海网7月14日消息(记者任桐)7月14日上午,参加第四届泛珠三角区域合作网络媒体论坛的区域网络媒体负责人及嘉宾一行到腾讯微信总部座谈交流,并签署《战略合作框架协议》(以下简称《框架协...
- 离线使用、植入微信-看乐心Mambo手环如何打破框架
-
从2014年开始智能手环就成功进入人们的生活,至今已经演变出数据监测、信息推送、心率监测等诸多五花八门的功能,人们选择智能手环并不指望其能够改变身体健康情况,更多的是通过数据来正视自身运动情况和身体健...
- 华专网络:如何零基础制作一个网站出来?
-
#如何零基础制作一个网站出来?#你是不是觉得网站建设很复杂,觉得自己是小白,需求不明确、流程搞不懂、怕被外包公司坑……这些问题我都懂!今天华专网络就用大白话给你捋清楚建站的全流程,让你轻松get网站制...
- WAIC2024丨明日上午9点,不见不散!共同探讨智能社会与全球治理框架
-
大咖云集,硕果闪耀WAIC2024世界人工智能大会智能社会论坛将于7月5日9:00-12:00与你相约直播间WAIC2024上海杨浦同济大学哔哩哔哩多平台同步直播探讨智能社会与全球治理框架WAIC...
- 约基奇:森林狼换来戈贝尔时大家都在嘲笑 他们的阵容框架很不错
-
直播吧5月4日讯西部季后赛半决赛,掘金将迎战森林狼,约基奇赛前接受采访。约基奇说道:“当蒂姆-康纳利(森林狼总经理、前掘金总经理&曾选中约基奇)做了那笔交易(换来戈贝尔)时,每个人都在嘲笑他...
- 视频号带货为什么一个流量都没有?顶级分析框架送给你
-
视频号带货为什么一个流量都没有?遇到问题,一定是步步来分析内容,视频号带货一个流量都没有,用另外一个意思来讲,就可以说是零播放。为什么视频号带货一个流量都没有?跟你说再多,都不如来个分析框架。1、是否...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- JAVA集合框架 (47)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)