使用Doctrine模型进行NetBeans自动完成?

时间:2011-05-10 19:17:36

标签: netbeans symfony1 doctrine phpdoc doctrine-1.2

我知道可以通过这样的方式从Doctrine中的* Table类中获取IDE自动完成:

SomethingTable::getInstance()-><autocomplete>;

但最重要的部分是缺失。我想在模型类本身上自动完成,而不仅仅是 Table类。似乎Doctrine没有在find 和其他标准模型方法中正确声明PHPdoc @return对象类型。

例如,我希望能够做到的是:

$something = SomethingTable::getInstance()->find($id);
$something-><autocomplete> 

并弹出Something类的方法和属性。

我也应该提一下,我并不特别关心使用SomethingTable :: getInstance()语法。任何标准Symfony的合适语法都是可以接受的。大多数时候我通过这样的自定义查询获取对象(或Doctrine_Collections):

$somethings = Doctrine_Query::create()
                ->from('Something s')
                ->leftJoin('s.SomethingElse s2')
                ->where(...);

顺便说一句,如果不清楚,我问是否有任何自动解决方案,使用各种Doctrine查找,获取或查询语法。我不是问如何手动编辑所有PHPdoc标头以导致我想要的行为。

我正在使用带有Doctrine的NetBeans 6.9.1和Symfony 1.4.12,但并非所有使用相同代码的人都使用NetBeans。

3 个答案:

答案 0 :(得分:3)

问题是自动生成的* Table类在getInstance()方法中有错误的phpdoc @return:

/**
 * Returns an instance of this class.
 *
 * @return object MyModelTable
 */
 public static function getInstance()
 {
     return Doctrine_Core::getTable('MyModel');
 }

您只需手动修复删除单词“object”的@return行:

 * @return MyModelTable

神奇的IDE自动完成功能正常运行,为您提供所有实例和静态方法:

MyModelable::getInstance()->... //(you'll have autocompletion here)

我知道,手动修复此问题很痛苦,但至少只需要为每个模型*表文件执行一次。

答案 1 :(得分:1)

在netbeans中很容易:

$foo = ModelNameTable::getInstance()->find(1); /* @var $foo ModelName */

/* @var $foo ModelName */告诉netbeans将变量$ foo作为ModelName类处理。

答案 2 :(得分:0)

只需添加

即可修复生成的模型文件
/**
 * @return ModelNameTable
 */

在getInstance()方法的注释中。这将为模型文件提供自动完成功能。 关于find方法,您可以像这样编辑的注释:

/**
 * @method ModelName find()
 */

我认为您可以通过创建自己的骨架文件来自动执行此操作。 或者不是:Symfony Doctrine skeleton files

您可以使用sed来实现此目的,或者使用反射api构建您自己的任务。