¿Por qué está c
en minúsculas en el controllers
nombre de la carpeta? ¿Mientras que Modelo, Bloque y Ayudante comienzan con una letra mayúscula?
controllers
Muthu
fuente
fuente
Respuestas:
Las clases ubicadas en las
controllers
carpetas son una clase especial de clases.No puede reescribirlos de la misma manera que reescribe un modelo o un bloque usando la
<rewrite>
etiquetaconfig.xml
, no puede crear una instancia usando una fábrica como lo hace para los modelos (Mage::getModel()
) o con ayudantes (Mage::helper
) o con bloques (Mage::app()->getLayout()->createBlock()
).Quiero decir que hay
Mage::getControllerInstance()
pero eso es un poco diferente. Más sobre esto más tarde.Puede notar que en realidad no siguen la regla de nomenclatura como las otras clases.
El trabajo
controllers
no se encuentra en el nombre de la clase.Tomemos por ejemplo el controlador encontrado en
Mage/Catalog/controllers/CategoryController.php
.El nombre de la clase es
Mage_Catalog_CategoryController
.No puedo darte una respuesta 100% segura, solo un desarrollador principal puede hacerlo.
Pero supongo que alguien no quería que los controladores se cargaran automáticamente.
Echa un vistazo a este método
Mage_Core_Controller_Varien_Router_Standard::match
. Es grande y aterrador, pero ese es el que asigna una url a un controlador y una acción.Se realizan muchos cálculos, pero en alguna parte hay esta línea:
Si cavamos más profundo en el
_validateControllerClassName
, terminarás engetControllerFileName
ese aspecto:y en el
_includeControllerClass
que, básicamente, hace esto:include $controllerFileName;
.Observe el código rígido
controllers
en el métodogetControllerFileName
y observe que el archivo del controlador solo se incluye. Así que no hay carga automática.Finalmente, la fábrica de controladores
Mage::getControllerInstance()
no localiza la clase y no busca en las reescrituras. Simplemente hacereturn new $class($request, $response, $invokeArgs);
dónde$class
está la clase de controlador.Nota al margen : en algunos módulos hay una carpeta llamada
Controller
(con C mayúscula) y las clases siguen el nombre de clase estándar. Esas clases no son realmente controladores. Se utilizan como clases principales para otros controladores en el módulo o como enrutadores.Nota al margen 2 : Esto no existe en Magento 2. Todos los controladores están ubicados en la
Controller
carpeta.fuente
Marius eres tan genial: D
Mi respuesta solo hubiera sido:
Este es el estándar de Zend Framework: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
fuente
controllers
y supongo que el equipo central de Mage sería un experto en Zend Framework. Prestigio. Gracias por compartir ese enlace