CMSPageController中的SilverStripe更改$menu_图标

CMSPageController中的SilverStripe更改$menu_图标,silverstripe,Silverstripe,我试图更改CMSPageController中的$menu_图标变量,而不编辑核心文件(即:CMS中菜单项“页面”旁边的图标)。我冒险尝试了以下方法: 1:在\u config.yml CMSPageController: extensions: - ChangeMenuIcon 2:在mysite中定义类并从CMSPageControllerExtension扩展 class ChangeMenuIcon extends CMSPageControllerExtension {

我试图更改
CMSPageController
中的
$menu_图标
变量,而不编辑核心文件(即:CMS中菜单项“页面”旁边的图标)。我冒险尝试了以下方法:

1:在\u config.yml

CMSPageController:
  extensions:
    - ChangeMenuIcon
2:在mysite中定义类并从
CMSPageControllerExtension
扩展

class ChangeMenuIcon extends CMSPageControllerExtension {
    private static $menu_icon = 'framework/admin/images/menu-icons/16x16/information.png';
}

这将导致500错误。这实际上是覆盖现有(核心)类属性的正确方法吗?

Faloude,因为它是一个私有静态,您可以尝试直接在
config.yml
中设置它,而不是应用扩展

CMSPagesController:
  menu_icon: 'framework/admin/images/menu-icons/16x16/information.png';

看起来确实有效的欢呼声。在我的代码中,我试图重新定义一个私有静态变量。但是由于
$menu\u title
在父类中是私有的,所以我不能更改子类中的值,对吗?@Faloude您可以在子类中重新定义它。在许多情况下,私有静态变量用于配置系统,不应直接访问,而应通过
config
,例如
config::inst()->get('MyClass','my\u static\u var')
。或者,在
Object
的任何子类中:
$this->config()->my_static\u var
有趣,那么这种访问/编辑私有静态变量或更具体地说配置系统中的变量的方式背后的原因是什么?什么类属于所谓的配置系统?@Faloude:基本上,配置系统允许你通过YML配置你想要的任何东西。值不必存在于代码中……如果它们作为静态变量存在于代码中,配置系统会将其作为默认值。也许这会提供更多信息:仅供参考:您得到了一个500错误,因为没有
CMSPageControllerExtension
类。您的扩展应该是
leftandmain扩展的子类
,或者干脆是
扩展
。不管怎样,使用答案中解释的配置系统会更好,所以请坚持使用它。哦,我认为通过将这些东西放在.yml文件中,我刚刚创建了
CMSPageControllerExtension
类。我猜是错误的假设!没有基于配置生成任何类。对于扩展,您编写类并使用配置系统应用它们。