这个问题是众所周知的:lib
类是通过自动加载器专门加载的,除以下内容外,我们不能更改它们:
- 将它们完全复制到lib之前检查的codePool中。
- 安装PSR-0自动加载器,指定自动加载类映射,然后将文件完全复制到该文件夹结构中。[我目前的解决方案]
我处于困境中,因为我想潜在地触摸其中的许多文件-但是出于我的理智和商店的稳定性/可升级性的考虑,我不想复制整个库类。
现在显然可以找到解决该问题的方法,但是它们都有自己的一系列问题:
- 进行AOP路由,并使用基于PHP的库(如Go!)!AOP:最后我检查了这将要求Magento类由作曲家自动加载器加载,而不仅仅是可用的。Flyingmana 在这方面做过一些工作,但肯定还不能用于生产,我的需求更加迫切。我还想将其作为扩展发布,这将需要更多的作曲家设置。
- 进行AOP路由并使用本机PHP扩展:这可能是目前最有利的扩展,但它需要安装单独的扩展,更不用说它不适用于HHVM。
- 使用PHP的classkit和/或runkit:这是另一个本机PHP扩展,因此与上述问题相同。
- 修补呼叫站点以使用我自己的命名空间(
\Danslo\Varien_X
)版本,然后从原始(\Varien_X
)扩展:有太多的呼叫站点需要修补,这将需要大量的重写。没有选择。 我自己说:应该有可能:
- 编写我自己的自动装带器。
- 将原始类复制到一个单独的文件夹(
{root_dir}/var/tmp
),将其包装在中namespace \Magento { < original contents > }
。 - 包括该文件。
- 包括我修改过的课程
OriginalClass extends Magento\OriginalClass {}
显而易见的缺点是:动态代码生成,正则表达式,加载重写类的开销很小。但是我几乎可以确定,当我只想触摸/添加约100行时,它将胜过复制约5000行代码。
我知道我要问很多,但是是否有一些现代且相对干净的东西可以帮助解决此问题?