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
相关产品推荐
相关产品推荐

