2016-07-12 4 views
1

Ich versuche, die $menu_icon Variable in CMSPageController zu ändern, ohne Kerndateien zu bearbeiten (IE: das Symbol neben dem Menüpunkt "Seiten" im CMS). Ich ging auf ein Glied, und versucht, die folgenden:

1: Definieren einer Erweiterung CMSPageController in _config.yml

CMSPageController: 
    extensions: 
    - ChangeMenuIcon 

2: Definieren Klasse und erstrecken sich von CMSPageControllerExtension in mysite

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

Dies führt zu einem Fehler von 500. Ist das tatsächlich die richtige Methode zum Überschreiben einer vorhandenen (Kern-) Klasseneigenschaft?

+1

Nur zur Info: Sie haben einen Fehler 500, weil es keine 'CMSPageControllerExtension' Klasse gibt. Ihre Erweiterung sollte eine Unterklasse von 'LeftAndMainExtension' oder einfach nur' Extension' sein. Das Konfigurations-System zu benutzen, wie in der Antwort erklärt, ist sowieso besser, also bleiben Sie dabei. – bummzack

+0

Oh ich dachte, indem ich dieses Zeug in die .yml-Datei legte ich gerade diese 'CMSPageControllerExtension'-Klasse. Falsche Annahme, denke ich! – Faloude

+0

Basierend auf der Konfiguration werden keine Klassen generiert. Bei Erweiterungen schreiben Sie die Klassen und verwenden das Config-System, um sie anzuwenden. – bummzack

Antwort

3

Faloude, da es eine private statische ist, könnten Sie versuchen, es direkt in der anstatt eine Erweiterung anzuwenden.

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

Prost das scheint zu funktionieren. In meinem Code versuche ich eine private statische Variable neu zu definieren. Aber da '$ menu_title' in der Elternklasse ** privat ** ist, kann ich den Wert in einer Unterklasse nicht ändern, oder? – Faloude

+1

@Faloude können Sie es einfach in Ihrer Unterklasse neu definieren. In vielen Fällen werden private statische Variablen für das Config-System verwendet und sollten nicht direkt, sondern über 'Config' aufgerufen werden, z. 'Config :: inst() -> get ('MyClass', 'my_static_var')'. Oder in jeder Unterklasse von 'Object':' $ this-> config() -> my_static_var' – bummzack

+0

Interessant, was ist der Grund dafür, wie man auf private statische Variablen oder genauer Variablen im config-System zugreifen kann? Und welche Klassen fallen unter das sogenannte * config system *? – Faloude