Mediawiki HTMLForm';政府的默认行动

Mediawiki HTMLForm';政府的默认行动,mediawiki,Mediawiki,在对维基媒体Gerrit进行代码审查时,我无意中发现有评论说: $htmlForm->setAction( wfScript() ); 审阅者:不需要,wfScript()是操作的默认值 所以我查阅了有关(巨大页面)的文档 设置窗体的action属性的值。 当设置为false(默认状态)时,将使用settitle 然而,我不明白的是,如何从标题中提取wfScript(获取指定脚本文件的路径,并考虑文件扩展名;这是围绕$wgScriptPath等的包装器。除了使用$wgScript/$wg

在对维基媒体Gerrit进行代码审查时,我无意中发现有评论说:

$htmlForm->setAction( wfScript() );
审阅者:不需要,wfScript()是操作的默认值

所以我查阅了有关(巨大页面)的文档

设置窗体的action属性的值。 当设置为false(默认状态)时,将使用settitle

然而,我不明白的是,如何从标题中提取
wfScript
(获取指定脚本文件的路径,并考虑文件扩展名;这是围绕$wgScriptPath等的包装器。除了使用$wgScript/$wgLoadScript的'index'和'load'之外,(的实例?)

这对我来说没有任何意义,因为
wfScript()
返回一个入口点,而所有
Title
通常共享同一个入口点

查找
HTMLForm::getAction
,我发现代码实际上使用了
标题
。不过,只能有条件地。简单地说,如果
Title::getLocalURL
将返回一个包含查询字符串的URL,例如
/mw/index.php?Title=Special:Contributions
,则返回
wfScript()
,并且与
HTMLForm::setAction()
中记录的内容相反,根本不使用标题。理由很清楚:这是因为浏览器可能会删除或修改查询字符串,这在这里是不需要的

为什么不总是使用隐藏表单字段方法,为什么标题必须知道其入口点?


如何将
$this->getConfig()->get('ArticlePath')
$this->getTitle()->getLocalURL()
[前者在中用作条件,后者可能从
HTMLForm::getAction

返回]

我不完全确定我是否理解您的问题,因此,如果这个答案不能真正回答您的问题,请随意评论,我将尝试修正我的答案:)

为什么不总是使用隐藏表单字段方法,为什么标题必须知道其入口点

为什么要这样做?是的,这是可能的,但使用它的唯一原因是,浏览器会删除传递给表单的
操作
参数的参数。其他值(例如短URL)可以正常工作。另一个方面是,如果配置短url(例如yourdomain.com/wiki/Special:UserLogin而不是yourdomain.com/w/index.php?title=Special:UserLogin),为什么HTMLForm要使用
yourdomain.com/w/index.php?title=Special:UserLogin&wpusername=test&wppassword=123
(糟糕的例子,因为UserLogin不使用HTMLForm,也不会使用GET,但考虑其他任何例子:P)而不是(对于用户)更好的例子
yourdomain.com/wiki/Special:UserLogin?wpusername=test&wppassword=123
?因此,不总是使用隐藏的
标题
字段iirc并没有真正的技术背景

$this->getConfig()->get('ArticlePath')与$this->getTitle()->getLocalURL()的关系如何

配置变量指定文章链接的基本URL,这意味着,如果在标题对象上调用
getLocalURL
,如果未指定查询,则使用config变量构建URL/链接(请参阅的代码以了解其工作原理)。这意味着,config变量指定如何从此函数返回链接(例如/w/index.php?title=$1或/wiki/$1)。因此,它是这个函数的一个非常重要的部分,也是(将圆圈闭合为HTMLForm)决定使用wfScript()还是本地url(来自Title对象)的重要条件,因为Title::getLocalURL()决定是否使用问号是条件


我希望这有助于理解HTMLForm的功能,如果没有,请随时发表评论:)

感谢您的全面回复。好了,有一部分现在清楚了。一个不是:
Title::getLocalURL()
基本上是
$url=str\u替换(“$1”,$dbkey,$wgallepath)在没有$query的情况下调用时。是因为此替换操作或挂钩很昂贵,还是为了与
HTMLForm::getHiddenFields()
保持一致,首先提取、分析配置变量,然后仅有条件地调用
Title::getLocalURL()
,虽然可以立即调用它并在不查看配置的情况下搜索问号,但我不确定它是否因为性能原因而以这种方式进行,但这是有意义的。标题只能是本地的(至少应该用于HTMLFrm),并且它应该总是在没有任何查询的情况下被调用,所以要考虑的唯一条件是CONFIG变量。我认为这是当时最简单的方法:)