【问题标题】:NetBeans autocompletion with Doctrine models?NetBeans 使用 Doctrine 模型自动完成?
【发布时间】:2011-08-22 18:02:42
【问题描述】:

我知道可以通过执行以下操作从 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 标头以导致我想要的行为。

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

【问题讨论】:

    标签: netbeans symfony1 doctrine phpdoc doctrine-1.2


    【解决方案1】:

    问题是自动生成的 *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 文件只需执行一次。

    【讨论】:

      【解决方案2】:

      在 netbeans 中很容易:

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

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

      【讨论】:

      • 虽然这可能是一个有用的组合,但它几乎在任何地方都需要这样做。我正在寻找一种解决方案,可以针对最常见的 Doctrine 情况解决此问题,而无需像这样进行大量编辑。
      • Doctrine 中有太多的魔力,因为它可以这么简单。
      【解决方案3】:

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

      /**
       * @return ModelNameTable
       */
      

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 2011-06-23
        • 1970-01-01
        • 2012-11-21
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        相关资源
        最近更新 更多