Автозаполнение NetBeans моделями Doctrine? - PullRequest
1 голос
/ 10 мая 2011

Я знаю, что можно получить автозаполнение IDE из * Таблиц классов в Doctrine, выполнив такие действия:

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

Но самая важная часть отсутствует.Я хочу автозаполнение для самих классов моделей, а не только для классов Table.Похоже, что Doctrine неправильно объявляет типы объектов PHPdoc @return в find и других стандартных методах модели.

Например, я хочу сделать следующее:

$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(...);

Кстати, если неясно, я спрашиваю, есть ли какое-нибудь автоматическое решение для этого сЛЮБОЙ из различных доктрин найти, получить или запросить синтаксис.Я НЕ спрашиваю, как вручную отредактировать все заголовки PHPdoc, чтобы вызвать поведение, которое я хочу.

Я использую NetBeans 6.9.1 и Symfony 1.4.12 с Doctrine, но не все, кто работает с одним и тем же кодом, используют NetBeans.

Ответы [ 3 ]

3 голосов
/ 08 июня 2011

Проблема в том, что автоматически сгенерированные * классы таблиц имеют неправильный phpdoc @return в методе getInstance ():

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

Вам просто нужно вручную исправить строку @return, удалив слово «объект»:

 * @return MyModelTable

И волшебное автодополнение IDE просто работает, предоставляя вам все экземпляры и статические методы:

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

Я знаю, это тяжело - вручную исправлять это, но по крайней мере этонеобходимо выполнить только один раз для каждой модели * Файл таблицы.

1 голос
/ 11 мая 2011

В netbeans это довольно просто:

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

/* @var $foo ModelName */ указывает netbeans обрабатывать переменную $ foo как класс ModelName.

0 голосов
/ 11 мая 2011

просто исправьте сгенерированные файлы модели, добавив

/**
 * @return ModelNameTable
 */

в комментарии метода getInstance (). Это обеспечит автозаполнение для файла модели. Что касается метода поиска, вы можете редактировать комментарий класса следующим образом:

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

Я думаю, что вы могли бы сделать это автоматически, создав собственные файлы скелета. Или нет: Файлы скелета Symfony Doctrine

Вы можете использовать sed для достижения этой цели, или, возможно, построить свою собственную задачу, используя API отражения.

...