Warum steht der c
Ordnername in Kleinbuchstaben controllers
? Während Model, Block und Helper mit einem Großbuchstaben beginnen?
controllers
Muthu
quelle
quelle
Antworten:
Die in den
controllers
Ordnern 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.xml
Sie 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
controllers
ist 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:
Wenn wir tiefer in das graben, sehen
_validateControllerClassName
Sie am Ende sogetControllerFileName
aus:und
_includeControllerClass
dass im Grunde tut dies:include $controllerFileName;
.Beachten Sie die
controllers
in der Methode fest codiertegetControllerFileName
und 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$class
die 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
Controller
Ordner.quelle
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
quelle
controllers
und ich nehme an, dass das Mage Kernteam ein Zend Framework Experte wäre. Ein dickes Lob. Vielen Dank für den Link