Почему c
строчная в controllers
имени папки? В то время как Model, Block и Helper начинаются с заглавной буквы?
controllers
Muthu
источник
источник
Ответы:
Классы, расположенные в
controllers
папках, представляют собой особую породу классов.Вы не можете переписать их так же, как вы переписываете модель или блок с помощью
<rewrite>
тега inconfig.xml
, вы не можете создать их экземпляр, используя фабрику, как вы делаете для моделей (Mage::getModel()
) или с помощью helpers (Mage::helper
) или с помощью блоков (Mage::app()->getLayout()->createBlock()
).Я имею в виду, что есть,
Mage::getControllerInstance()
но это немного по-другому. Подробнее об этом позже.Вы можете заметить, что они на самом деле не следуют правилу именования, как другие классы.
Работа
controllers
не найдена в названии класса.Давайте возьмем для примера контроллер, найденный в
Mage/Catalog/controllers/CategoryController.php
.Имя класса есть
Mage_Catalog_CategoryController
.Я не могу дать вам 100% точный ответ, это может сделать только основной разработчик.
Но я предполагаю, что кто-то не хотел, чтобы контроллеры загружались автоматически.
Взгляните на этот метод
Mage_Core_Controller_Varien_Router_Standard::match
. Это большой и страшный, но это тот, который отображает URL-адрес контроллера и действия.Выполнено много вычислений, но где-то есть эта строка:
Если мы будем копать глубже,
_validateControllerClassName
вы в конечном итоге будетеgetControllerFileName
выглядеть так:и в
_includeControllerClass
том , что в основном делает это:include $controllerFileName;
.Обратите внимание на жестко закодированный
controllers
методgetControllerFileName
и обратите внимание, что файл контроллера только что включен. Так что нет автозагрузки.Наконец, фабрика контроллеров
Mage::getControllerInstance()
не находит класс и не ищет в перезаписываемых файлах. Это просто делает,return new $class($request, $response, $invokeArgs);
где$class
находится класс контроллера.Примечание : в некоторых модулях есть папка с именем
Controller
(с заглавной буквы C), и классы следуют стандартному именованию классов. Эти классы на самом деле не контроллеры. Они используются в качестве родительских классов для других контроллеров в модуле или в качестве маршрутизаторов.Примечание 2 : Это не существует в Magento 2. Все контроллеры расположены в
Controller
папке.источник
Мариус ты такой классный: D
Мой ответ был бы просто:
Это стандарт Zend Framework: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
источник
controllers
и я предполагаю, что основная команда Mage будет экспертами Zend Framework. Престижность. Спасибо за то, что поделились этой ссылкой