文件夹名称为什么c小写controllers?而Model,Block和Helper以大写字母开头?
文件夹名称为什么c小写controllers?而Model,Block和Helper以大写字母开头?
Answers:
地处中的类controllers文件夹是类的一个特殊的品种。
您不能以与使用中的<rewrite>标记重写模型或块相同的方式来重写它们config.xml,也不能像使用模型(Mage::getModel())或使用助手(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映射到控制器和动作的代码。
完成了许多计算,但是在某处有以下行:  
$controllerClassName = $this->_validateControllerClassName($realModule, $controller);如果我们深入研究,_validateControllerClassName您将最终getControllerFileName看到以下内容:  
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;
}并且_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框架专家。荣誉 感谢您分享该链接