扩展名:JSONCONFIG

来自MyaWiki.Org
跳转到导航 跳到搜索
MeimaWiKi扩展手册
OOJS用户界面图标
JSONCONFIG
发布状态: 稳定的
实施 接线员 米维基
描述 提供基于Wiki的JSON配置系统
作者(S) Yuri Astrakhan尤里克说话
最新版本 1.1.0
维基百科 1.29 +
PHP 5.5 +
数据库更改
许可证 GNU通用公共许可证2或更高版本
下载
RFC
  • $WGJSONSOCTS
  • $WGJSON配置模型
翻译JSONCONFIG扩展如果在TurtLeWik.NET中可用
检查使用和版本矩阵。

这个JSONCONFIG扩展允许其他扩展将它们的配置数据存储为Wiki页面中的JSON BLUB。

可用特性和使用模式[编辑]

  • 您可以使用JSONCONFIG以多种方式存储数据:
    • 在单个配置页中,例如在“CONFIG:MyEXT设置配置是与JSONCONFIG扩展相关联的默认命名空间;
    • 在一组具有相似结构的页面中驻留在自己的命名空间中,例如已知代理或IP日志模式的IP地址,名为“代理:歌剧“或”模式命名Schema:会计创造
    • 仅用于标题与正则表达式模式匹配的页,例如配置:代理:歌剧配置:Opera.proxy。这避免了使用许多命名空间填充wiki,每个内容模型都有一个名称空间。
  • 您可以提供一个内容类来进行数据验证(超出有效JSON)和规范化。
  • 您可以提供一个视图类来定制HTML显示。
  • 您可以存储数据:
    • “每个wiki一个”,“每个集群一个”,甚至每个“家庭”一个(共享共享缓存的缓存密钥的不同结构);
    • 在公共或私人维基中,以凭据访问;
    • 在单独的群集中,并在更改时执行远程通知。

安装[编辑]

  • 下载并将文件放置在一个名为JSONCONFIG在你扩展文件夹

对于运行MyaWiKi 1.29或更早的用户:

上面的说明描述了使用此扩展插件的新方法。WFLADDXXISTH(). 如果需要在这些早期版本上安装扩展(MediaWiKi 1.29和更早版本),而不是拉伸张力 “JSONCONFIG” ,您需要使用:

要求一次 美元IP/Ext/ JsonConfig /JSONCONFIG.php

配置[编辑]

$WGJSONSOCTS[编辑]

此变量定义了每个类型的配置页的配置文件。$WGJSONSOCTS是数组的关联数组,每个子数组具有下列参数的零个或多个。默认情况下,JSONCONFIG使用字符串键作为此配置文件表示的模型ID,但如果您希望在多个配置文件中重用相同的模型ID,则可以用模型参数。

参数 类型 默认 描述
模型 字符串 (键入)$WGJSONSOCTS 创建新页时使用的模型ID。如果没有给出,则此配置文件的数组密钥将成为模型ID。如果将该值设置为无效的内置模块IDJSONCONFIG将被使用。模型ID还必须在$WGJSONSONSCORDEMODEL中列出,除了无效的“JSONCONFIG”.
命名空间 int NSL CONFIG(482) 这些配置将驻留的命名空间,或默认情况下的“配置”
NSNEX 串/假 对于非缺省(不是NSL CONFIG 482)命名空间,给它指派一个规范(英文)名称。如果一个以上的$WGJSONSONSCS数组使用相同的命名空间,则只设置名称一次。如果没有找到,将给出警告,并且命名空间将获得自动的“混淆”名称。如果此配置不在本地存储,则NSNEX将用作远程命名空间,而不使用本地声明。

如果希望与其他非JSONCOFIG内容页共享命名空间,请将此值设置为false。

恩斯特尔 字符串 NSnNe+说话 对于非默认命名空间,向他们的谈话页面分配规范(英文)名称。
模式 字符串 (全部) 正则表达式以匹配给定命名空间中的页标题。如果为空,则配置将应用于命名空间中的所有页。为了匹配遗留的“子空间”行为,子空间=真使用^/^名称:。模式,以及ISSuffSales=false使用/^名称$模式
局部的 布尔 如果为真,则此配置不会跨集群共享,而是每个wiki将具有本地配置。如果FALSE,这个配置意味着要在多个Wiki上共享,为了在本地生成这个特定的Wiki存储,设置“存储”字段。
笔记此标志影响缓存密钥,因此如果该设置为false,则将在同一名称中共享具有相同名称的配置页,但如果Wiki为真,则其将是唯一的。
卡谢普 int 24×60×60 在缓存中缓存的值应该是多长(秒)
卡切基 字符串 如果设置了值,则将该字符串添加到缓存键中。使用卡切基使先前缓存的值无效(例如,当做出不兼容的更改时,将修改缓存的值),并且担心可能需要回滚。此密钥还可以用于允许同一个家庭中的所有语言Wikk共享同一缓存值,同时存储在同一页上,但存储在不同的Wikes上。例如,维基百科可以使用“WP”,WikQueGes可以使用“WQ”。
浪花 布尔 如果为true,将尝试通过标记的RESS扩展获得最新的修订,如果NULL,标记的修订将被检查,如果可用,则使用。如果FALSE,将总是使用最新版本。
遥远的 数组 一个具有描述如何从另一个wiki访问配置的参数的对象。如果没有设置“存储”,则必须存在局部的是假的。
一个网址 字符串 非默认API端点可以从远程wiki得到配置,仅此配置配置文件。如果未指定,将使用华山松鼠.
第二用户名 字符串 如果给定的话,将用于对远程配置存储进行身份验证。
加密密码 字符串 用户名.
商店 数组 将此值设置为TRUE或数组,以使当前Wiki实际承载此配置数据。如果丢失,该值将自动填充。局部的是真的。
α-κ值 布尔 配置更改时,缓存应该如何更改。如果为false,则删除缓存值,强制其他Wike重新请求它。TRUE将新值设置为缓存。如果使用此配置的存储和wiki共享相同的缓存,这将是非常有用的。谨防万一如果消费者wiki请求新的值太快,它可能从一个可能过时的从数据库中得到它。
网址: 字符串 可选地指定在配置更改时将调用的远程API URL。
一个新的名字 字符串 可选的用户名与NoTIFYURL一起使用
密码通知 字符串 与NoTIFYURL一起使用的可选密码

$WGJSON配置模型[编辑]

这个变量定义了哪个自定义内容类将处理哪个模型ID。不止一个模型ID可以由同一个内容类来处理。所有内容类必须从JCI含量类;如果模型ID映射到无效的然后,默认JC内容类处理模型ID。

例子:

$WGJSON配置模型[“配置MyExtSettings”] = “MyExt\MyCaleToCeC类”

如果实现一个单独的类来进行HTML呈现,则可以将配置模型指定为一个额外的数组。意见

$WGJSON配置模型[“配置MyExtSettings”] = [
    “班” = > “MyExt\MyCaleToCeC类”
    “视图”  = > “MyExt\MyCuttVIEW类” /更容易扩展jcDebug或CordDebug CtutVIEW视图

实例[编辑]

在版本1.0.0之前,JsonConfig使用姓名子空间值来定制哪些页面属于给定内容模型。两者都已在版本1.0.0中移除,并替换为模式接受正则表达式的参数。确保用^和$符号包围你的模式,并添加斜杠(PHP样式)

你好世界[编辑]

最简单的情况是没有任何验证的单个配置页,在每个wiki上本地存储。只需将这些设置添加到LoopalStutsP.PHP

//内容模型是'jsNangFig .MySt设置
//Model类被设置为NULL以允许未经验证的数据
$WGJSON配置模型[“JSONCONFIG.MyStudio”] = 无效的

$WGJSONSOCTS[“JSONCONFIG.MyStudio”] = 数组
  “模式” = > '/^ MyStudio$/' //配置名称空间中的页面名称

上面启用了本地wiki上的命名空间“CONFIG”,但只允许创建“CONFIG:MySt设置”页面,而不是在该命名空间中创建任何其他页面。可以在页面中存储格式良好的JSON数据。

阅读MySt设置PHP中的数据,使用标题值对象访问该页,然后请求其内容:

使用 JSONCONFIG
美元电视 =  标题值 NSXCONFIG “MyStudio”  /db键
美元内容 = 杰辛顿::获取内容 美元电视 
如果  美元内容>有效的()  {
    $数据 = 美元内容>获取数据();
    
}

集群中共享的多个配置[编辑]

假设我们决定将可信代理的IPs存储为“配置:代理:绰号“Meta Wiki页面,并与集群共享这些数据。

//所有wiki必须具有这样的配置:
$WGJSONSOCTS[“JSONCONFIG代理”] = [
  “模式” = > '/^代理: //要求'''后至少有一个字母
  “本地” = > 


//除了Wiki之外的所有Wiki,LoopalStutsP.PHP都将把这个URL设置为Meta Wiki的API端点:
$WGJSONSOCTS[“JSONCONFIG代理”]“遥控器”] = “HTTP://Meta。Wikimdia.Org/W/API.PHP”

/Meta Wiki的PoalStalpEng.PHP将指示数据应该存储在那里。
$WGJSONSOCTS[“JSONCONFIG代理”]“商店”] = 

如果您想将单独的命名空间贡献给代理,则参数将更改为:

$WGJSONSOCTS[“JSONCONFIG代理”] = [
  “命名空间” = > 神经网络 /NNN是您为代理命名空间保留的号码。
  “NSNEX” = > “代理” /规范命名空间名称

验证[编辑]

大多数情况下,还需要自定义内容类,并有自己的验证。JSON页面由派生的内容类处理。JCI含量. 内容类负责解析和验证原始文本。JCI含量在JSON解析之外不做任何验证,但您可以选择从其派生并重写。JCult::ValueAd(). 更好的是,你可以从JCOBJY含量类,它提供多个验证原语,并且仅重写。JCOBJEng::ValueTeCeCon().

//这应该在所有wiki上完成,包括元维基
$WGJSON配置模型[“JSONCONFIG代理”] = “PROXEXET\PROXY内容”

为了这个文档,我们假设代理Opera页面描述Opera Mini服务器有这样的格式:

{
    “启用” 
    “评论” “参见http://…“更新”
    “IPS” [
        “37.228104.0/21”
        
    ]
}

下面是验证数据的内容类。

使用 JSONCOFIG\JCOBJJ内容
使用 JSONCOFIG\JC验证器

 脯氨酸含量 延伸 JCOBJY含量 {

    /**
*派生类必须实现此方法来执行自定义验证。
*使用检查(…)调用
*/
    公共 功能 验证内容() {
        //'启用'必须是布尔值,默认情况下是真的。
        /jcValue::*已经处理了本地化错误消息
        $此>睾丸的 “启用”  JC验除器::伊斯博尔() 
        //类型字符串的可选字段“注释”
        $此>睾丸的 “评论”  JC验除器::字符串() 
        /I/IPS必须是有效的CIDR范围列表
        //当默认值不能通过验证时,字段不是可选的。
        $此>测试 “IPS” 自己::GEITP确认器() 
    }

    私人 静止的 功能 GEITP确认器() {
        /jcValu$value是用状态信息包装的正在检查的字段的值。
        /V$> GETValue~()正在检查的实际值
        /V$> ISMISSION(),如果该值不存在于数据中
        /V$-DeUrtUsUDDE(),如果该值不存在,则提供默认值
        //数组$PATH此字段在层次结构中的位置-每个值是字符串或int
        /jjbjEngult$$这个对象,通过$Field> GETField()可以访问其他字段。
        //您可以修改存储在内部的值,设置附加标志,或报告错误
        //使用$V->错误($KEY,$PATH,…)功能
        退货 功能  JC值 美元价值 数组 $路径 JCOBJY含量 $自我  {
            伊塞尔 = 
            五元 = 美元价值>获取值();
            如果  ISSH字符串 五元   {
                //用户提供单个字符串,作为非AsCOC数组处理
                五元 = 数组 五元 
            } 其他的 {
                /确保$v是非AsSOC数组,其所有值都是字符串。
                伊塞尔 = 杰奎尔::ISIST 五元  γ 杰奎尔::所有值字符串 五元 
            }
            如果  伊塞尔  {
                //todo:做其余的IP验证,并将$ISRR设置为true,以失败为例
            }
            //错误消息可能以这种形式出现:
            //“参数\”$ 1 \“必须是一个有效的非限制(无专用网络)CIDR IP块的数组”
            如果  伊塞尔  {
                美元价值>错误 我的代理配置错误 $路径 
            } 其他的 {
                美元价值>设定值 五元 
            }
        };
    }
}

存储Wiki上的定制行为[编辑]

您还可能希望在存储wiki(上述示例中的元wiki)上自定义查看和页面创建。有两种方法可以做到这一点:JCI含量派生类,或通过派生的“视图”类派生JcCordNeVIEW. 第二种方法是最好的,因为它干净地分离架构,视图类只需要存在于存储Wiki(例如Meta Wiki)中,而不在使用数据的所有wiki上。

重写默认值JCI含量派生类,重写构造函数并设置美元文本如果新默认设置为null,则将其传递给父构造函数。要重写HTML生成,重写JCult::GeTtML.().

使用推荐的方法,创建一个派生类的视图类JcCordNeVIEW或者更丰富的特征JCdultCultVIEW视图. JcCordNeVIEW,您将需要实现值()GETDebug(). 默认情况下,视图由JCdultCultVIEW视图类,它也可以用作可定制的基础,如果你只需要对它的外观进行轻微的调整。

//从上面改变模型定义应该在所有wiki上完成,包括元
$WGJSON配置模型[“JSONCONFIG代理”] = [ “班” = > “PROXEXET\PROXY内容” 

//添加视图类-只应在存储wiki(例如元)上完成
$WGJSON配置模型[“JSONCONFIG代理”]“视图”] = “PROXEXET\PROXYVIEW”
 PROXYVIEW 延伸 JSONCOFIG\jcDebug ButcTeNoVIEW {
    公共 功能 获取默认值 $MIDID  {
        退货 < <杰森
{
“评论”:“见http://…更新“,”
“IPS”:
“N.N.N.N/NN”,…
]
}
杰森
    }
}

最佳实践[编辑]

  • 使用JSONCONFIG的扩展应该将它们的配置添加到$WGJSONSOCTS$WGJSON配置模型在主扩展文件中。例如,参见零孔扩张零泊松
  • 如果在多个wiki中共享配置数据,请记录使用的密钥名称。$WGJSONSONSOCS[]并初始化“存储”/“远程”部分本地设置. 这比引入复制配置功能的多个全局变量要好。例如,查看维基媒体的配置图扩展跨多个wiki(虽然使用复杂的多wiki设置,而不是简单配置变量)。

地位[编辑]

实现特征[编辑]

  • JSON解析将JSON文本转换为数组或对象
  • 可视化显示JSON是一个易于查看的表,而不是代码,带有一些额外的高亮显示。例如,如果不提供该值并使用默认值,则用灰色显示,或者当值与默认值相同时,它显示为紫色。例如,参见.
  • 代码编辑器简化JSON编辑
  • 自定义验证执行复查,例如检查值是否处于正确格式或用户ID是否存在。
  • 内存缓存根据自定义键和过期策略在JMSCHOME中存储JSON BLUB,并在保存时重置JSON BLUB。
  • 标记修订支持允许配置在进入生产之前被标记为“评审”。
  • 国产化大多数基本的接口元素都是用多种语言完成的,如果大多数常见的消息只在一个地方完成,那么它将减少翻译工作。

未付诸实施的善待[编辑]

这些特性对于多于一种类型的配置是可取的:

  • 模式验证程序-对抗JSON模式因为大多数扩展可能不需要复杂的验证规则,或者可能需要将架构加上额外的验证。
  • 自定义编辑器零团队一直在考虑实现一个更复杂的编辑器,可能基于JSON模式。
  • API查询支持-允许配置页以所有格式返回为常规API结果-JSON/XML/…而不是文本斑点:
    API?PHP?Actudio =查询和标题=配置:代理:Opera&Prp= JSONCONFIG
  • 国产化-能够显示每个配置密钥的本地化描述是好的。

外部访问[编辑]

存储的配置数据可能经常被一些外部代理(如JavaScript、BOT或其他程序)所需要。JavaScript可以使用JSONP通过调用标准来访问所需的数据。Actudio =查询和RVPROP=内容API,或者如果CORS不可用,我们可以开发一个转发服务。扩展作者可以选择添加自己的API模块来提供特定于域的信息。最后,RCDPROP= JCDATA数据查询API参数将返回JSON数据作为API结果的一部分,而不是作为一个文本块RVPROP=含量会回来。

/不执行!使用正则动作=查询API,直到我们决定如何正确处理
var 情商 = {
    格式 “杰森” 行动 “查询”
    头衔 代理:歌剧
    支柱 “修订” RVPROP “JCD-Cype” 索引页 
};
$.阿贾克斯({
    网址 //meta。维基百科。org/W/API.php
    数据 情商 隐藏物  数据库类型 “JSONP”
    成功 功能结果 { *处理错误和警告、进程内容。*/ }
(});