Dlaczego nazwa folderu ma c
małe litery controllers
? Podczas gdy Model, Blok i Pomocnik zaczynają się od dużej litery?
controllers
Muthu
źródło
źródło
Odpowiedzi:
Klasy znajdujące się w
controllers
folderach są specjalnym rodzajem klas.Nie można ich przepisać w taki sam sposób, jak przepisuje się model lub blok przy użyciu
<rewrite>
znacznikaconfig.xml
, nie można utworzyć ich przy użyciu fabryki, jak w przypadku modeli (Mage::getModel()
), pomocników (Mage::helper
) lub bloków (Mage::app()->getLayout()->createBlock()
).Mam na myśli, że jest,
Mage::getControllerInstance()
ale to trochę inaczej. Więcej na ten temat później.Możesz zauważyć, że tak naprawdę nie przestrzegają reguły nazewnictwa jak inne klasy.
Dzieła
controllers
nie znaleziono w nazwie klasy.Weźmy na przykład kontroler znaleziony w
Mage/Catalog/controllers/CategoryController.php
.Nazwa klasy to
Mage_Catalog_CategoryController
.Nie mogę dać ci 100% pewnej odpowiedzi, tylko główny programista może to zrobić.
Ale zakładam, że ktoś nie chciał, aby kontrolery były ładowane automatycznie.
Spójrz na tę metodę
Mage_Core_Controller_Varien_Router_Standard::match
. Jest duży i przerażający, ale to ten mapuje adres URL do kontrolera i akcji.Wykonano wiele obliczeń, ale gdzieś jest ta linia:
Jeśli kopiemy głębiej
_validateControllerClassName
, skończysz wgetControllerFileName
taki sposób:i
_includeControllerClass
że w zasadzie robi to:include $controllerFileName;
.Zwróć uwagę na kodowanie
controllers
na stałe w metodziegetControllerFileName
i zauważ, że plik kontrolera jest właśnie dołączony. Więc nie ma automatycznego ładowania.Wreszcie, fabryka kontrolerów
Mage::getControllerInstance()
nie lokalizuje klasy i nie sprawdza zapisów. Po prostu robi,return new $class($request, $response, $invokeArgs);
gdzie$class
jest klasa kontrolera.Uwaga dodatkowa : w niektórych modułach znajduje się folder o nazwie
Controller
(z dużą literą C), a klasy są zgodne ze standardową nazwą klasy. Te klasy nie są tak naprawdę kontrolerami. Są one używane jako klasy nadrzędne dla innych kontrolerów w module lub jako routery.Uwaga dodatkowa 2 : To nie istnieje w Magento 2. Wszystkie kontrolery znajdują się w
Controller
folderze.źródło
Marius, jesteś taki świetny: D
Moja odpowiedź brzmiałaby:
Jest to standard Zend Framework: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
źródło
controllers
i zakładam, że główny zespół Mage byłby ekspertami od zend framework. Sława. Dzięki za udostępnienie tego linku