当试图在 Pimcore CMS 的前端列出对象时,我遇到了这个问题。类目录IS在 include_path 中。类 php 脚本位于website /var/classes。但是 Zend 向我抛出了异常:
警告:include_once(Object/hotelAds/List.php):无法打开流:第 145 行的 /var/www/html/pimcore/lib/Zend/Loader.php 中没有此类文件或目录
请告知为什么会发生这种情况。谢谢。
当试图在 Pimcore CMS 的前端列出对象时,我遇到了这个问题。类目录IS在 include_path 中。类 php 脚本位于website /var/classes。但是 Zend 向我抛出了异常:
警告:include_once(Object/hotelAds/List.php):无法打开流:第 145 行的 /var/www/html/pimcore/lib/Zend/Loader.php 中没有此类文件或目录
请告知为什么会发生这种情况。谢谢。
请阅读 OOP 并遵循命名约定,类名应始终以大写字母开头,这就是为什么 oop php 框架使用首字母大写的 ucfirst 函数。因为 Zend 是一个非常严格的类型框架,所以它让你学习良好的编程习惯。
像往常一样,我的问题太复杂了。所以让我自己回答。
Pimcore 有一个缺陷,需要纠正以防止混淆。当您像我一样命名一个类(例如hotelAds)时,它就会被创建。但是该类的目录将命名为 HotelAds (/website/var/classes/Object/HotelAds/)(总是从大写字母开始)。因此,当您尝试包含您命名的类以及您在后端(!!)中看到的类时 - 这是完全错误的,并且找不到文件。
当我通过“new Object_HotelAds_List()”(注意大写 H)更正问题时 - 文件已包含在内,但我相信这不会解决问题。由于在后端,该类被命名为“hotelAds”,因此如果您打开类 php 文件,那里也有“hotelAds”。所以这行不通。
我想 Pimcore 可能会按照自己的意愿命名文件,但是在解析类请求时,它必须在后端查找类名。
无论如何,在使用 pimcore 类时,您必须在后端以大写字母开头命名类,这是它工作的唯一方法。否则,您将失去大约 48 小时试图找出问题所在。对于 Pimcore 开发人员,我建议在使用小写字母命名类时至少发出警告。