我正在编写一个丰富的JS应用程序,我想了解如何构建JS / PHP的广泛建议.我不知道如何分开这个问题,对不起,如果问的话太多了.我正在遭受信息超载!
我希望JS将从单个PHP文件中请求JSON对象.我想要一个简单但有效的PHP模式来响应简洁有效的请求.也许JS会调用类似模型的对象来查询数据库并将JSON返回给客户端.
什么是PHP方面的好模式?我已经乱砍了一个PHP文件,它有一个大的switch语句解析来自客户端的指令,以及相关的数据.单个请求可能包含多个指令.例如,javascript发送请求:
$.ajax({
url: '/ajax.php', dataType: 'json',
data: {instructions: [{
instruction: "newPerson",
data: {
name: person.name,
email: person.email
city: person.city
}
}]},
success: callback, error: ajaxFail
});
回调将是一个全局处理程序,处理PHP返回的任何对象,来自此请求或其他.例如,上面的内容可能会收到一个新的人物对象,其中包含PHP插入数据库时生成的人员ID,以及具有其ID的城市对象.其他请求也可能返回那些对象,所以单个处理程序有意义吗? (一个问题是javascript如何将返回的对象与提交的插入相关联)
我对我的PHP页面代码感到羞愧,但它看起来像这样:
$return = array();
$instructions = $_REQUEST['instructions'];
foreach ($instructions as $instruction){
switch($instruction['instruction']){
case 'findPoeple':
$data = $instruction['data'];
$res = DB::query("select player from person where player like '%". DB::esc($str) ."%'");
$return['players'] = array();
while ($row = DB::fetch($res)){
$return['players'][] = $row['player'];
}
break;
case 'loadAllPeople':
// similar code
break;
case 'newPerson':
// similar code
break;
default:
die("command '$command' not recognised");
break;
}
}
echo json_encode($return);
很显然,这有什么不足以说明要改变什么!但我已经相当清楚我正在寻找的最终结果是什么.任何人都可以指出我简明的模式,专门演示JS / PHP的这种方法,使用OOP以一种可敬的方式实现这一点吗?
MVC对我有意义,直到丰富的JS应用程序成为可能,边界看起来非常模糊,任何启示都是神派,我现在从头开始.
谢谢!
解决方法:
tl; dr:PHP响应简洁有效请求的最小但有效的模式是为每种类型的请求使用单独的PHP脚本
而不是试图在PHP中路由请求,让Web服务器自动处理路由可能更简单,更容易和更高效.您所要做的就是将开关块中的每个案例分成它自己的脚本,如下所示:
/findpeople.php
/loadallpeople.php
/newperson.php
这样,当您收到’newperson.php’请求时,您明确知道需要哪些参数(1),如何验证每个参数(2)以及客户端期望的资源类型(3).
例如:
>’newperson.php’可能需要姓名,电子邮件和城市才能创建新人
>名称可能是一个字符串(从3到16个字符或其他任意范围);一个电子邮件地址基本上是一个字符串,但在正确验证时有一些很好的东西,一个城市可能是一个字符串,具有类似的约束作为名称
>如果客户端正在尝试创建新人,他们可能想知道请求是否成功,以及新人的识别功能(可能是数据库中的person_id值?)
最后,如果您想在Javascript中对多个请求进行分组,最简单的方法可能就是执行多个单独的AJAX请求,每个指令一个.
如果您想将它提升到一个新的水平,请对REST-ful Web服务进行一些研究,然后重新考虑如何公开资源(在这种情况下是您的人物对象集合).围绕人物对象的(更多)REST-ful架构可能如下所示:
POST / person / – 创建一个新人
POST / person / person_id – 修改一个人
GET / person / person_id – 检索有关个人的信息
GET / person / – 检索所有人
您可以通过$_SERVER['request_method']变量访问PHP中的HTTP请求方法,然后相应地执行操作.
REST原则和实现的一些基本信息:
> How I Explained REST To My Wife
>(对不起,我会提供维基百科的链接和Roy Fielding的论文,其中’发明’REST,但没有必要的声誉)
标签:javascript,php,oop,design-patterns
来源: https://codeday.me/bug/20190901/1784962.html