2

尝试在 magento 模块中加载块时发现了一个意外问题。块名称是 *Mycompany_CustomerModule_Block_CustomerModuleDashboardDataBlock*(是的,名称很长,但我添加了与模块相关的所有块的模块名称,以避免将 dashboard.html 与 Magento Core 使用的混淆)。问题是,如果我尝试使用以下命令加载这样的块:

$this->getLayout()->createBlock('customermodule/customermoduledashboarddatablock')

Magento 引发异常“无效的块类型”。我不知道出了什么问题,因为我从一个完美运行的块中复制了整个文件,然后我尝试将该块重命名为更短的名称,例如简单的DashboardDataBlock。使用较短的名称,块被正确加载。

因此,我的问题是,类名称的长度是否有任何限制?我总是可以缩短类名,但我想知道是否有限制,这样我就可以避免将来遇到类似的问题。谢谢。

4

2 回答 2

2

问题是,不管文件系统是否区分大小写,Magento 类名的最后一部分不能是驼峰式大小写。

  • MyNamespace_MyModule_MyClassName
  • MyNamespace_MyModule_myclassname
  • MyNamespace_MyModule_myclassName
  • MyNamespace_MyModule_Myclassname 是的
  • MyNamespace_MyModule_My_Class_Name 是的

您也会在核心模块中注意到这种模式。命名空间和模块的类前缀是从配置文件中读取的,可以包含任意大写字母。但是实际的类名是以不允许大写字母的方式从类别名派生的(Mage_Core_Model_Config::getGroupedClassname()如果你想知道为什么,请查看代码。提示:它使用uc_words

于 2013-02-21T10:19:17.517 回答
1

这里可能有几件事在起作用。如果您使用的是区分大小写的文件系统,那么问题是您需要在文件名和类 ID(customermoduledashboarddatablock在您的情况下)之间匹配 camelCasing,并注意自动加载器解析的任何文件夹或文件的第一个字母无论类前缀或类ID如何,都需要大写。此外,请注意 PHP 不关心类名和方法调用的大小写 - 只有自动加载器关心,并且只关心区分大小写的文件系统。

另一个可能的问题是 Windows 环境中的总文件名长度。

于 2012-07-27T04:13:37.337 回答