首页 > 解决方案 > 如何向用户显示自定义错误消息?

问题描述

我有一个简单的扩展程序,它通过确保具有特定类别的所有页面都包含其中的特定模板来验证文章页面。我的检查发生在一个onPageContentSave函数中。

我按照文档使用了 $status->fatal(),然后返回 false 以中止保存。但是,没有向用户显示任何内容,因此他们不知道出了什么问题。

我试过的:

public static function onPageContentSave($wikiPage, $user, $content, $summary, $isMinor, $isWatch, $section, $flags, $status) { 

    $content = $content->getNativeData();
    $response = self::httpPost("http://api.oneorzero.org:9999/theo", ['data' => json_encode(['wikiPage' => $wikiPage, 'user' => $user, 'content' => $content, 'summary' => $summary, 'isWatch' => $isWatch, 'section' => $section, 'flags' => $flags, 'status' => $status])]);
    $response = json_decode($response, true);

    $continue = false;
    if(json_encode($response) == '{"message":"success"}') {

        $continue = true;
    } else {

        $status->fatal( new RawMessage(json_encode($response)));
    }

    // $response should be true on success, and false on fail
    // false cancels the article save
    return $continue;
}

此代码在 RawMessage 从未向用户显示的例外情况下有效。

任何帮助表示赞赏

标签: mediawikimediawiki-extensions

解决方案


看来您想要AbuseFilter。定义一个显示错误消息的规则(您可以选择哪个),如果用户尝试保存具有类别且没有模板的页面而不是保存页面,则如下所示:

action == 'edit'
& new_wikitext irlike '\[\[category:your_category(\|[^\]]*)?\]\]'
& !new_wikitext irlike '\{\{your_template(\|[^}]*)?\}\}'
  1. 第一个条件仅适用于页面编辑/创建。
  2. 它将不区分大小写地检查页面的新 wikitext 和正则表达式,该正则表达式应该找到对 category 的分配Your_category
  3. 最后,它将检查新的 wikitext 是否包含对模板的调用{{Your_template}}

推荐阅读