You need to enable JavaScript to run this app. Silverstripe 4.7 扩展SiteConfig时onAfterWrite方法添加成功提示的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Silverstripe 4.7 扩展SiteConfig时onAfterWrite方法添加成功提示的实现方法

Silverstripe 4.7 SiteConfig扩展onAfterWrite添加操作提示的实现方法

原代码不生效原因

Silverstripe 4的CMS后台SiteConfig保存逻辑由核心控制器LeftAndMain处理,直接为当前响应添加X-Status头会被后续的Admin响应流程覆盖,无法被前端CMS通知组件识别捕获。

正确实现代码

首先在你的扩展类顶部引入必要的命名空间:

use SilverStripe\ORM\DataExtension;
use SilverStripe\Control\Controller;
use SilverStripe\Admin\LeftAndMain;

方案1:后台上下文专用写法(推荐)

直接调用当前后台控制器的消息设置方法,消息会自动渲染为CMS顶部的提示条:

class FaviconSiteConfig extends DataExtension 
{
    public function onAfterWrite(){
        parent::onAfterWrite();
        
        // 仅在后台请求时触发提示,避免CLI/前端请求时报错
        if (Controller::has_curr() && Controller::curr() instanceof LeftAndMain) {
            // 第二个参数为消息类型:可选good(成功)/bad(错误)/warning(警告)/info(提示)
            Controller::curr()->setMessage('Favicons 更新成功!', 'good');
        }
    }
}

方案2:头信息兼容写法

如果你需要沿用头信息注入的方式,调整后写法如下:

public function onAfterWrite(){
    parent::onAfterWrite();
    
    if (Controller::has_curr() && Controller::curr() instanceof LeftAndMain) {
        Controller::curr()->getResponse()->addHeader('X-Status', rawurlencode('Favicons 更新成功!'));
    }
}

生效验证

代码修改完成后,访问yoursite.com/dev/build?flush=all清空系统缓存,重新保存SiteConfig配置即可看到提示消息。

内容的提问来源于stack exchange,提问作者seppzzz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 07:24:01