我知道可以通过这样的方式从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。
答案 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构建您自己的任务。