阅读(2262) (9)

调用过程

2017-06-13 15:50:35 更新

模板加载:


默认地,ModPHP 会通过模板入口文件(站点根目录下的 index.php)来调用模板目录中对应的文件。

但只有当访问的路径不是一个真实的文件或目录时,ModPHP 才会这么做。

例如 http://localhost/something, ModPHP 的访问顺序是这样的:

  1. 尝试仿问站点根目录下的 something 文件或文件夹;
  2. 尝试访问模板目录下的 something 文件夹,如果存在这个文件夹,则尝试访问目录下的索引文件,不存在则报告 403 错误;
  3. 尝试访问模板目录下的 something 文件;
  4. 尝试访问模板目录下的 something.php、something.html 等文件,后缀列表由 Template 引擎设置;
  5. 尝试匹配伪静态规则;
  6. 尝试匹配模块记录的自定义链接;
  7. 没有查询到模板,报告 404 错误。

URL 请求:


可以通过 URL 携带参数访问 mod.php 程序文件直接提交请求和获取数据,通常在 AJAX 中使用。

需要至少提供两个参数,{obj} 和 {act},用来调用相应的对象(类)和操作(方法),其他的参数将作为方法的参数。

ModPHP 会自动收集向后台提交的数据,执行请求的操作并将结果(JSON)返回给客户端。

默认支持四种提交请求的 URL 形式,以获取 user_id = 1 的用户为例:

  1. mod.php?obj=user&act=get&user_id=1[&更多参数]
  2. mod.php?user::get|user_id:1[|更多参数]
  3. mod.php?user::get|user_id=1[|更多参数]
  4. mod.php/user/get/user_id/1[/更多参数]

关于 jQuery 的小提示:

ModPHP 会在 URL 请求操作时设置请求头 Content-Type: application/json,jQuery 会根据该请求头自动解析返回到客户端的 JSON 数据。因此你不必自己进行解析,直接使用即可。

关于跨域请求:

如果你需要进行跨域请求,请通过判断 URL 地址等方式来决定仅对有限的链接开放跨域权限。使用发送请求头 Access-Control-Allow-Origin: * 的方式开放跨域权限,而不是选用 jsonp 这些鸡肋的方式。

Socket 请求:

Socket 请求的方式和 URL 请求类似,不同的只是无需访问 mod.php 文件,并且使用 JSON 传输数据。

同样需要两个参数,{obj} 和 {act},用来调用相应的对象(类)和操作(方法),其他的参数将作为方法的参数。

在处理流程和返回数据上,则和 URL 请求完全一致。

上述请求用户的例子,如使用 WebSocket,也可以这么做:

  • WebSocket.send(JSON.stringify({obj: 'user', act: 'get', user_id: 1}));

或者又例如在 Python 中:

  • socket.sendall(b'{"obj":"user", "act":"get", "user_id":"1"}') 更详细的说明请查看《启用 Socket 服务器》。

外部调用:

外部程序要调用 ModPHP, 只需要引入 ModPHP 程序入口文件。比如下面这个例子:

<?php
require('mod.php'); //载入程序入口文件
echo curl('http://ip.cn'); //CURL 请求,将输出服务器的当前 IP 地址及简单信息

在命令行中使用:

请查看《在命令行中运行 ModPHP》。