Silverstripe 4.7 自定义 SiteConfig onAfterWrite 成功消息

问题描述

银条 4.7

我扩展了 SiteConfig,我想在 onAfterWrite 函数显示成功消息。

如何做到这一点?

class FaviconSiteConfig extends DataExtension 

{

//...........

    public function onAfterWrite(){
        parent::onAfterWrite();
 
        // THIS DOESNT WORK!! ::
        //Controller::curr()->getResponse()->addHeader('X-Status',rawurlencode('Favicons updated!!'));

    }

//...........
    
    

}

解决方法

我发现的唯一方法是:

SilverStripe\Core\Injector\Injector:
  SilverStripe\SiteConfig\SiteConfigLeftAndMain:
    class: FaviconSiteConfigLeftAndMain

和:

<?php

use SilverStripe\SiteConfig\SiteConfig;
use SilverStripe\SiteConfig\SiteConfigLeftAndMain;
use SilverStripe\ORM\DataObject;


use SilverStripe\Dev\Debug;
use SilverStripe\Dev\Backtrace;


class FaviconSiteConfigLeftAndMain extends SiteConfigLeftAndMain
{
    
    
    
    
     public function save_siteconfig($data,$form)
    {
        $data = $form->getData();
        $siteConfig = DataObject::get_by_id(SiteConfig::class,$data['ID']);
        $form->saveInto($siteConfig);
        $siteConfig->write();
        if ($siteConfig->hasExtension(RecursivePublishable::class)) {
            $siteConfig->publishRecursive();
        }
         
        if($data['DoRefreshFavicon'] == 1){
            //Debug::show($data);
             $response = 'Favicon was updated successfully! You might empty your browser-cache to take effect!';
        }else{
            $response = _t('SilverStripe\\Admin\\LeftAndMain.SAVEDUP','Saved.');
        }
         
         $this->response->addHeader(
                'X-Status',rawurlencode($response)
            );
        
        return $form->forTemplate();
    }
        
}