当尝试列出Pimcore CMS前端的对象时,我遇到了这个问题。类目录在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/)(从大写字母开始)。因此,当您尝试包含您命名的类以及您在 backend(!!) 中看到的类时 - 这是完全错误的,并且找不到文件。
当我通过"new Object_HotelAds_List()"(通知大写字母 H)更正问题时 - 该文件被包含,但我相信这不会解决问题。与后端一样,该类被命名为"hotelAds",因此,如果您打开类php文件,则还有"hotelAds"。所以这是行不通的。
我想 Pimcore 可能会按照它想要的方式命名文件,但是在解析类请求时,它必须在后端查找类名。
无论如何,在使用 pimcore 类时,您必须在后端以大写字母开头命名类,这是它工作的唯一方法。其他方式,您将浪费大约 48 小时试图找出问题所在。对于 Pimcore 开发人员,我建议在用小写字母命名类时至少抛出警告。