Pourquoi le nom du dossier est-il en cminuscules controllers? Alors que Model, Block et Helper commencent par une lettre majuscule?
Pourquoi le nom du dossier est-il en cminuscules controllers? Alors que Model, Block et Helper commencent par une lettre majuscule?
Réponses:
Les classes situées dans les controllersdossiers sont une race spéciale de classes. 
Vous ne pouvez pas les réécrire de la même manière que vous réécrivez un modèle ou un bloc à l'aide de la <rewrite>balise config.xml, vous ne pouvez pas les instancier à l'aide d'une fabrique comme vous le faites pour les modèles ( Mage::getModel()) ou avec des assistants ( Mage::helper) ou avec des blocs ( Mage::app()->getLayout()->createBlock()). 
Je veux dire qu'il y en a Mage::getControllerInstance()mais c'est un peu différent. Plus d'informations à ce sujet plus tard. 
Vous remarquerez peut-être qu'ils ne suivent pas réellement la règle de dénomination comme les autres classes. 
L'œuvre controllersest introuvable dans le nom de la classe. 
Prenons par exemple le contrôleur trouvé dans Mage/Catalog/controllers/CategoryController.php. 
Le nom de la classe est Mage_Catalog_CategoryController. 
Je ne peux pas vous donner une réponse sûre à 100%, seul un développeur principal peut le faire.
Mais mon hypothèse est que quelqu'un ne voulait pas que les contrôleurs soient chargés automatiquement.  
Jetez un œil à cette méthode Mage_Core_Controller_Varien_Router_Standard::match. C'est gros et effrayant, mais c'est celui qui mappe une URL à un contrôleur et une action. 
Il y a beaucoup de calculs effectués mais quelque part il y a cette ligne:  
$controllerClassName = $this->_validateControllerClassName($realModule, $controller);Si nous creusons plus profondément dans le _validateControllerClassNamevous finirez par getControllerFileNameressembler à ceci:  
public function getControllerFileName($realModule, $controller)
{
    $parts = explode('_', $realModule);
    $realModule = implode('_', array_splice($parts, 0, 2));
    $file = Mage::getModuleDir('controllers', $realModule);
    if (count($parts)) {
        $file .= DS . implode(DS, $parts);
    }
    $file .= DS.uc_words($controller, DS).'Controller.php';
    return $file;
}
et _includeControllerClassqui fait essentiellement ceci: include $controllerFileName;.  
Notez le codé controllersen dur dans la méthode getControllerFileNameet notez que le fichier du contrôleur est juste inclus. Donc pas de chargement automatique.  
Enfin, la fabrique de contrôleurs Mage::getControllerInstance()ne trouve pas la classe et ne regarde pas dans les réécritures. Il fait juste return new $class($request, $response, $invokeArgs);où se $classtrouve la classe de contrôleur.
Note latérale : Dans certains modules, il existe un dossier appelé Controller(avec C majuscule) et les classes suivent le nom de classe standard. Ces classes ne sont pas vraiment des contrôleurs. Ils sont utilisés comme classes parentes pour d'autres contrôleurs du module ou comme routeurs.
Note latérale 2 : Cela n'existe pas dans Magento 2. Tous les contrôleurs se trouvent dans le Controllerdossier.
Marius tu es si grand: D
Ma réponse aurait simplement été:
Il s'agit de la norme Zend Framework: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
controllerset je suppose que l'équipe principale de Mage serait un expert du framework zend. Gloire. Merci d'avoir partagé ce lien