1

我知道可以通过执行以下操作从 Doctrine 中的 *Table 类中获取 IDE 自动完成功能:

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

但是缺少最重要的部分。我想要模型类本身的自动完成,而不仅仅是表类。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 标头以导致我想要的行为。

我将 NetBeans 6.9.1 和 Symfony 1.4.12 与 Doctrine 一起使用,但并非所有处理相同代码的人都使用 NetBeans。

4

3 回答 3

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)

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

于 2011-06-08T16:11:46.180 回答
1

在netbeans中它很容易:

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

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

于 2011-05-11T00:07:17.130 回答
0

只需通过添加来修复生成的模型文件

/**
 * @return ModelNameTable
 */

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

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

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

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

于 2011-05-11T08:58:13.893 回答