Warum ist c in Magento-Controllern in Kleinbuchstaben geschrieben?


28

Warum steht der cOrdnername in Kleinbuchstaben controllers? Während Model, Block und Helper mit einem Großbuchstaben beginnen?


6
Hey ... warum die Gegenstimme? Dies ist eine legitime und eigentlich gute Frage.
Marius

Es gibt ein Mitglied (ich werde den Namen natürlich nicht nennen), das zufällig meldet / abstimmt. Diese Frage wurde beispielsweise als anstößig markiert: D
user487772

@ TimBezhashvyly ... ja, das verstehe ich. Am Anfang war es anstößig, aber dann las ich die Frage noch einmal :)
Marius

Controller mit einem Großbuchstaben C war schon vergeben haha.
Julien Lachal

Antworten:


28

Die in den controllersOrdnern befindlichen Klassen sind eine besondere Klasse.
Sie können sie nicht so umschreiben, wie Sie ein Modell oder einen Block mit dem <rewrite>Tag in neu schreiben. config.xmlSie können sie nicht mit einer Factory instanziieren, wie Sie es für Modelle ( Mage::getModel()) oder mit Helfern ( Mage::helper) oder mit Blöcken ( Mage::app()->getLayout()->createBlock()) tun .
Ich meine es gibt, Mage::getControllerInstance()aber das ist ein bisschen anders. Dazu später mehr.
Möglicherweise stellen Sie fest, dass sie nicht der Namensregel der anderen Klassen entsprechen.
Die Arbeit controllersist nicht im Klassennamen enthalten.
Nehmen wir zum Beispiel den Controller aus Mage/Catalog/controllers/CategoryController.php.
Der Klassenname ist Mage_Catalog_CategoryController.
Ich kann Ihnen keine 100% sichere Antwort geben, das kann nur ein Core-Entwickler.
Aber ich gehe davon aus, dass jemand nicht wollte, dass die Controller automatisch geladen werden.

Schauen Sie sich diese Methode an Mage_Core_Controller_Varien_Router_Standard::match. Es ist groß und beängstigend, aber es ist dasjenige, das eine URL einem Controller und einer Aktion zuordnet.
Es werden viele Berechnungen durchgeführt, aber irgendwo gibt es diese Zeile:

$controllerClassName = $this->_validateControllerClassName($realModule, $controller);

Wenn wir tiefer in das graben, sehen _validateControllerClassNameSie am Ende so getControllerFileNameaus:

public function getControllerFileName($realModule, $controller)
{
    $parts = explode('_', $realModule);
    $realModule = implode('_', array_splice($parts, 0, 2));
    $file = Mage::getModuleDir('controllers', $realModule);
    if (count($parts)) {
        $file .= DS . implode(DS, $parts);
    }
    $file .= DS.uc_words($controller, DS).'Controller.php';
    return $file;
}

und _includeControllerClassdass im Grunde tut dies: include $controllerFileName;.

Beachten Sie die controllersin der Methode fest codierte getControllerFileNameund beachten Sie, dass die Controller-Datei nur enthalten ist. Also kein Autoloading.

Schließlich findet die Controller-Factory Mage::getControllerInstance()die Klasse nicht und sucht nicht in den Neuschreibungen. Es macht nur, return new $class($request, $response, $invokeArgs);wo $classdie Controller-Klasse ist.

Randnotiz : In einigen Modulen gibt es einen Ordner mit dem Namen Controller(mit Großbuchstaben C) und die Klassen folgen der Standardklassennennung. Diese Klassen sind nicht wirklich Controller. Sie werden als übergeordnete Klassen für andere Controller im Modul oder als Router verwendet.

Nebenbemerkung 2 : Dies ist in Magento 2 nicht vorhanden. Alle Controller befinden sich im ControllerOrdner.


15

Marius du bist so toll: D

Meine Antwort wäre nur gewesen:

Dies ist der Zend Framework Standard: http://framework.zend.com/manual/1.12/de/zend.controller.quickstart.html


1
Das ist eigentlich eine gute Antwort.
Marius

1
Das ist eine schöne Antwort. Ich denke, das wäre eine richtigere Antwort als Marius. Weil ein Zend Framework Entwickler nicht über ein anderes Verzeichnis nachdenken würde controllersund ich nehme an, dass das Mage Kernteam ein Zend Framework Experte wäre. Ein dickes Lob. Vielen Dank für den Link
Rajeev K Tomy

Sehr zu helfen fulll
Amit Bera

1
Ja, ich denke, dass dies auch die richtige Antwort ist. Ich habe mir nicht einmal die ZF-Normen angesehen. Ich habe nur versucht, eine logische Erklärung zu finden. Zu meiner Verteidigung erklärte ich in der Antwort, dass es meine Meinung war.
Marius
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.