外部函数/external
定义在moodle/lib/externallib.php
概观
外部函数API允许您创建可由外部程序(如Web服务API)访问的完全参数化的方法。
外部函数位于externallib.php文件中。每个外部函数都是在一个类中实现的,并辅之以两个描述函数:
- FUNCTIONNAME_parameters()描述函数的参数
- FUNCTIONNAME_returns()描述了返回值
描述函数使用为此目的而创建的external_description类。
externallib.php
- 该文件位于插件的根目录(https://docs.moodle.org/dev/Frankenstyle#Plugin_types)。如:moodle\calendar\externallib.php
- 该文件由包含外部函数及其描述函数的类组成。
<?PHP / **
* PLUGIN外部文件
*
* @package local_PLUGIN
* @copyright 20XX YOURSELF
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3或更高版本
* /
require_once($CFG->libdir . "/externallib.php"); class local_PLUGIN_external extends external_api { / **
*返回方法参数的描述
* @return external_function_parameters
* /
public static function FUNCTIONNAME_parameters() {
// FUNCTIONNAME_parameters()总是返回一个external_function_parameters()。
// external_function_parameters构造函数需要一个external_description数组。
return new external_function_parameters(
// external_description可以是:external_value,external_single_structure或external_multiple结构
array('PARAM1' => new external_value(PARAM_TYPE, 'human description of PARAM1'))
);
}
/ **
*功能本身
* @返回字符串欢迎消息
* /
public static function FUNCTIONNAME($PARAM1) { //参数验证
$params = self::validate_parameters(self::FUNCTIONNAME_parameters(),
array('PARAM1' => $PARAM1)); //注意:不要忘记验证上下文并检查功能 return $returnedvalue;
} / **
*返回方法结果值的描述
* @return external_description
* /
public static function FUNCTIONNAME_returns() {
return new external_value(PARAM_TYPE, 'human description of the returned value');
} }
要进一步阅读这个核心开发者教程:Creating_a_web_service_and_a_web_service_function。
安全
在对外部函数中的任何数据进行操作之前,必须在数据最具体的上下文中调用external_api::validate_context()。这将执行一些理智和安全检查,以及为渲染内容设置正确的主题,语言和过滤器。如果你的函数只使用一个上下文,在你的外部函数启动时验证一次。如果您的函数在多个上下文(如课程列表)上运行,则必须在生成与该上下文相关的任何响应数据(例如调用任何 $OUTPUT 函数或$PAGE->get_renderer())之前验证每个上下文。不要从外部函数调用require_login,该函数是为PHP脚本返回一个网页保留的。不要手动调用 $PAGE->set_context(),这会产生警告通知。
还要确保在使用external_api::validate_parameters()之前传递所有参数,以确保正确清理输入。
还要确保在任何地方执行适当的功能检查 - 外部功能是一个公共API。
例
您将在Web服务模板插件中找到external.php文件的示例。这个插件包含一个web服务hello_world函数。为了使测试变得容易,插件将在文件夹/客户端中与测试客户端一起分发
外部函数/external的更多相关文章
- c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
c语言中,多个文件组合的时候,有可能标示名相同,那么这个时候编译器如何判别的呢? c语言中有3种链接属性: 外部(external), 内部(internal),无设置(none) 外部( ...
- Clickhouse 用户自定义外部函数
写在前面 Clickhouse 从 21.11 版本开始,除了提供类似SqlServer.MySQL CREATE FUNCTION 的自定义函数之外,还有一个用户自定义函数(UDF),与其说是&qu ...
- 【C语言】外部函数和内部函数
目录 [外部函数] [内部函数] 1.外部函数 定义的函数能被本文件和其它文件访问(默认). 注:不允许有同名的外部函数. 2.内部函数 定义的函数只能被本文件访问,其它文件不能访问. 注:允许 ...
- 如何在 ejs 模板中使用 helper function 外部函数进行特殊处理?
一般我们想要在 ejs 模板中使用外部函数用于特殊的处理,比如:<%= ellipsis(title, 30) %> 通常的做法是: 使用 app.locals 来定义: app.loca ...
- Jmeter外部函数引用
Jmeter外部函数引用 1.Beanshell引用Jmeter变量 添加用户自定义变量,输入变量名称和变量值,添加Debug sampler,用于输出初始变量值.
- pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式
利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: Datawindow的DataObject的单位必须为像素(Pixels). Datawindow ...
- c语言,全局变量,局部变量,外部函数,内部函数,stasic和extern的复习总结
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 用static声明外部变量与内、外部函数
1.用static声明外部变量 若希望某些外部变量只限于被本文件引用,而不能被其他文件引用,可以在定义外部变量时加一个static声明. 例:(file1.c) #include <stdafx ...
- JNI的又一替代者—使用JNR访问Java外部函数接口(jnr-ffi)
1. JNR简单介绍 继上文“JNI的替代者—使用JNA访问Java外部函数接口”,我们知道JNI越来越不受欢迎,JNI是编写Java本地方法以及将Java虚拟机嵌入本地应用程序的标准编程接口.它管理 ...
随机推荐
- luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control
传送门 要求断掉某些边使得两个点不连通,显然是最小割 但是要求选的边数尽量少,,, 可以考虑修改边权(容量),即把边权\(c\)改成\(c*(m+1)+1\) 没了 // luogu-judger-e ...
- Linux新增用户过程详解
Linux系统中,当使用useradd添加用户时,会将系统的/etc/skel目录下的所有文件复制到新添加用户的家目录中.该目录下的所有文件都是隐藏文件(以.点开头的文件). 通过修改.添加.删除/e ...
- tidb 架构~tidb 理论学习(1)
一 简介:介绍新型NEW SQL数据库tidb 二 目的: tidb出现的目的,就是代替mysql+中间件,实现横向水平扩展 三 核心理论观点 1 MySQL 是单机数据库,只能通过 XA 来满足跨数 ...
- weblogic对JSP预编译、weblogic读取JSP编译后的class文件、ant中weblogic.jspc预编译JSP
我们都知道在weblogic中JSP是每次第一次访问的时候才会编译,这就造成第一次访问某个JSP的时候性能下降,有时候我们也希望JSP被编译成class然后打包在jar中实现隐藏JSP的功能,下面介绍 ...
- Modelsim SE 破解教程
第一步:打开我们提供的破解工具包. 第二步:拷贝crack.bat和MentorKG.exe到"C:\modeltech64_10.2c\win64"路径下,如果你的电脑为32位, ...
- kset学习demo以及Oops反汇编objdump调试例子【原创】
写一个main.c gcc -c -g main.c objdump -S main.o > b.txt arm-none-linux-gnueabi-gcc -c -g a.c arm-non ...
- Linux性能分析的前60000毫秒【转】
Linux性能分析的前60000毫秒 为了解决性能问题,你登入了一台Linux服务器,在最开始的一分钟内需要查看什么? 在Netflix我们有一个庞大的EC2 Linux集群,还有非常多的性能分析工具 ...
- How to scroll down with Phantomjs to load dynamic content
page.open('http://example.com/?q=houston', function () { // Checks for bottom div and scrolls down f ...
- 移动端中遇到的坑(bug)!!!
1.模拟单选点击的时候,在ios手机下,点击下面的内容选择,会出现页面闪一闪!! 解决方案:样式重置html的时候加上这句 -webkit-tap-highlight-color: rgba(0, ...
- 【转】OpenCV对图片中的RotatedRect进行填充
函数名:full_rotated_rect 函数参数: image输入图像,rect希望在图像中填充的RotatedRect,color填充的颜色 主要的思路是:先找到RotatedRect的四个顶点 ...