Por que c
letras minúsculas no controllers
nome da pasta? Enquanto Model, Block e Helper estão começando com uma letra maiúscula?
controllers
Muthu
fonte
fonte
Respostas:
As classes localizadas nas
controllers
pastas são uma raça especial de classes.Você não pode reescrevê-los da mesma maneira que reescreve um modelo ou um bloco usando a
<rewrite>
tag inconfig.xml
, não pode instancia-los usando uma fábrica como faz para modelos (Mage::getModel()
) ou com auxiliares (Mage::helper
) ou com blocos (Mage::app()->getLayout()->createBlock()
).Quero dizer, existe,
Mage::getControllerInstance()
mas isso é um pouco diferente. Mais sobre isso mais tarde.Você pode perceber que eles não seguem a regra de nomenclatura como as outras classes.
O trabalho
controllers
não foi encontrado no nome da classe.Vamos pegar, por exemplo, o controlador encontrado em
Mage/Catalog/controllers/CategoryController.php
.O nome da classe é
Mage_Catalog_CategoryController
.Não posso lhe dar uma resposta 100% certa, apenas um desenvolvedor principal pode fazer isso.
Mas suponho que alguém não queira que os controladores sejam carregados automaticamente.
Dê uma olhada neste método
Mage_Core_Controller_Varien_Router_Standard::match
. É grande e assustador, mas é o que mapeia um URL para um controlador e uma ação.Existem muitos cálculos feitos, mas em algum lugar existe esta linha:
Se aprofundarmos mais,
_validateControllerClassName
você terminarágetControllerFileName
assim:e em
_includeControllerClass
que, basicamente, faz isso:include $controllerFileName;
.Observe o código embutido
controllers
no métodogetControllerFileName
e observe que o arquivo do controlador está incluído. Portanto, sem carregamento automático.Por fim, a fábrica do controlador
Mage::getControllerInstance()
não localiza a classe e não procura nas reescritas. Apenas fazreturn new $class($request, $response, $invokeArgs);
onde$class
está a classe do controlador.Nota lateral : Em alguns módulos, há uma pasta chamada
Controller
(com C maiúsculo) e as classes seguem a nomeação de classe padrão. Essas classes não são realmente controladoras. Eles são usados como classes pai para outros controladores no módulo ou como roteadores.Nota lateral 2 : Isso não existe no Magento 2. Todos os controladores estão localizados na
Controller
pasta.fonte
Marius você é tão legal: D
Minha resposta seria apenas:
Este é o padrão do Zend Framework: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
fonte
controllers
e presumo que a equipe principal do Mage seria uma especialista em estrutura zend. Parabéns. Obrigado por compartilhar esse link