将作曲家的自动加载器集成到Magento中


19

所以composer很棒,而且composer的packagist存储库中有很多代码,使编写Magento扩展更加容易。

我面临的问题是(干净地)设置自动加载的最佳方式。

默认情况下,composer软件包安装到/ vendor,并且在该目录中是一个autoload.php文件,该文件为composer托管的软件包设置类加载。

那么,什么是require_once作曲家的“ /vendor/autoload.php”文件的最佳方法呢?这将需要同时适用于Webstore和Shell脚本。我可以点击执行观察者事件吗?

干杯!


如果github.com/magento-hackathon/magento-composer-installer在这里没有任何帮助,则不知道。我认为这完全无关。我认为您尝试使用composer安装非Magento软件包,并希望基本上将它们包含在lib /中
Alex

是的,如果您愿意,可以将composer设置为安装到lib,但是如果可能的话,我想将composer libs / mage libs分开。同样,在作曲家中,您可以拥有诸如Mapped autoloader机制不适合的类映射自动加载之类的简洁功能。
亚伦·邦纳

1
+1。似乎从Mage.php发出的早期事件之一应该可以解决问题...?
kalenjordan 2013年

我知道很久以前就已经回答了这个问题,但是另一种选择是将供应商自动加载器包括在index.php文件中(在require_once $mageFilename调用之前)。这对于客户端安装非常有效,并且根本不需要重写文件。
SwiftOtter上的约瑟夫,2015年

好吧,您正在破解一个核心文件index.php。升级时,您需要记住您已将那行代码添加到index.php。
亚伦·邦纳

Answers:


15

Magento自动装带器已在中注册Mage.php

如果要在自己的模块中执行此操作,则应抓住可能的第一个事件,并在此要求自动加载器

根据艾伦(Alan)的分析,可能是resource_get_tablename-但您必须确保只处理一次该事件。

快速而又肮脏的解决方案是打补丁Mage.php(文件的开头)-但这是在破解内核。

我们还有Magento-PSR-0-Autoloader模块,该模块提供了一种通过配置添加作曲家自动加载的方法。它是利用resource_get_tablename事件的基本实现。


谢谢亚历克斯,太完美了。我已经修补了mage.php,但不想将其投入生产。观察resource_get_tablename工作正常!
亚伦·邦纳

4
Vinai也有一个很好的建议,那就是将Varien_Autoload放在本地代码池中,并在其中放置必要的代码,这样可以避免昂贵的观察者事件和直接修补核心代码。
亚伦·邦纳

1
“上述示例的简单实现:github.com/thijssnowcountry/magento1_composer_loader ”-@ user2594875
Fabian Schmengler,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.