有没有一个能够处理Magento代码库的PHP集成开发环境(IDE)?

11

Magento有一个庞大的代码库(6000多个php文件),使用复杂的自动加载逻辑,并且在XML中有很多配置。我正在寻找一种可以理解这个代码库的IDE,能够显示函数声明的位置、调用它的地方等等。有没有一种IDE可以处理这个庞然大物?

编辑 - 添加示例

这里是按照Magento方式加载产品的示例:

 $product = Mage::getModel('catalog/product')->load($productID)

获取一个帮助类看起来很相似:

 $helper = Mage::getHelper('catalog/product')

此外,属性的getter和setter通常是从模型中推断出来的,该模型很可能是在XML文件中声明的,而不是在代码中声明的。


我主要关注的是Magento实例化对象和引用类的不寻常方式。代码库的大小并不是主要问题。 - Laizer
你能举个这样实例化的例子吗? - Pekka
还要记住,用于加载产品的句柄可能并不总是按照您想象的方式进行映射。虽然catalog/product应该映射到Mage_Core_Catalog_Model_Product,但有人也可能已经将其覆盖为完全不同的类并重写了一些方法。 - Joe Mastey
11个回答

14

也许不是你想要的答案,但文件数量可能不会成为障碍。因为Magento使用奇怪的方法来实例化对象(例如Mage :: getModel 等),普通的代码补全完全无法解决。此外,Magento大量使用PHP的魔术函数,这些函数当然完全不受代码补全的影响。

我曾经使用过几个IDE来开发Magento(Komodo、Zend Studio、Eclipse),但效果都不太好。只有Komodo没有试图猜测而崩溃,所以我一直在使用它。

希望这能有所帮助。谢谢!

Joe


13
作为一个Netbeans的粉丝,你需要寻找的是Zend Studio和Netbeans都支持的“类类型提示(Class Type Hints)”。Magento在设置这些方面较慢,但在代码中也有一些情况。

参考链接:http://files.zend.com/help/Zend-Studio-7/code_assist_concept.htm

 /* @var $myVar TestClass */
 $myVar = new getClass();

当前上面的链接已失效。 - Arkadij Kuzhel

10

我开发了一个PHPStorm的开源插件,也许你想看一下:http://www.magicento.com

该插件可以处理您所需求的功能,并且还有更多功能,例如在xml文件中进行自动完成。由于我在日常工作中使用该插件,因此我会每个星期添加更多功能。希望它对你也有用。


7
如果你想要一个免费的集成开发环境(IDE),那么 Eclipse PDT 就可以胜任。它可以毫无问题地处理所有这些文件。如果你想要一个更加全面的 IDE,我会选择 Zend Studio。Zend Studio 实际上就是 Eclipse PDT 加上其他功能(例如非常好用的浏览器工具栏调试器/分析器,以及更好的代码格式化)。

3
我现在正在使用PDT,但它似乎完全不了解Magento的自动加载奇怪行为。我该如何让它有所启发? - Laizer
尝试将Magento的路径添加到项目的库中。 - mylesmg

6
这将取决于两个因素:IDE的智能程度(它是否能识别所有自动加载的类?)和性能(IDE遍历文件树以构建查找词典需要多长时间?它会多久刷新一次?)。一个IDE能否处理这些文件量强烈依赖于你的机器配置。我建议你试用最流行的PHP IDE版本,并找到最适合你的那个。很容易找出你是否能够使用它们。
我自己使用Nusphere的phpEd(14天试用版在这里)。我从未使用过如此大型的项目,但使用了大型项目并且对代码查找功能感到满意。像大多数IDE一样,它允许手动添加包含文件以防漏掉自动加载的内容。
还有Zend Studio(下载请点击这里)和Eclipse PDT(这里),还有很多其他工具可以在这个问题中查看。并非所有工具都支持PHP代码补全,因此您需要选择支持此功能的工具。

1
我正在使用PDT的Eclipse,它的功能效率相当高。 - MANCHUCK

3
尝试使用适用于基于Eclipse的IDE的Magento插件,可以处理Magento对象的实例化(如Mage::helper('helper')、Mage::getModels('module/model')等)。 http://code.google.com/p/magento-plugin

2
我发现使用任何一种Eclipse版本(Aptana、PDT或Zend),并充分利用文档功能,如/* @var ... */注释,会有很好的效果。
例如,如果我正在开发一个名为Strube_MyModule的自定义模块,并具有以下结构:
Strube\ MyModule\ Block\ Custom.php template\ mymodule\ custom.phtml
则Strube\MyModule\Blocks\Custom.php。
<?php
  class Strube_MyModule_Block_Custom extend Mage_Core_Block_Template {
    public function _construct() {
      $this->setTemplate('../../../../path/to/template/mymodule/custom.phtml');
    }

    /**
     * Eclipse is smart enough to follow PHP-Docs
     *
     * @return Mage_Customer_Model_Customer
     */
    public function getCustomer() {
      return Mage::getSingleton('customer/session')->getCustomer();
    }
  }

template\mymodule\custom.phtml

<?php
  /**
   * PHP DOC!
   */
  /* @var $this Strube_MyModule_Block_Custom */
  // Now you can auto-complete $this->...
  // You can also <ctrl> + click on functions that descent from $this
  echo $this->getChildHtml();

  // It will also autocomplete based on PHP-doc @return tags
  echo $this->getCustomer()->getName();

2

1

我使用Netbeans来处理大型PHP项目(它也可以处理大型Java和C项目)。我的当前CakePHP项目有35000个文件,其中包括外部库等4000-5000个PHP文件。

IDE在一段时间内是响应灵敏的,但如果您让它在过夜后保持运行状态,IDE会变得迟缓,您需要重新启动它。


1

1
看起来http://magicento.com/ - @Enrique上面提到的 - 已经集成了这些新功能。 - Laizer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接