Intereting Posts
Как проверить_спальник из базы данных Правильный путь к классу документов в Netbeans PHP Перенаправление на диалог проверки подлинности – «Произошла ошибка. Пожалуйста, повторите попытку позже" Неправильный SHA1 от PHP и CF в соответствии с Amazon S3 Как заглавная первая буква после дефиса, то есть Адам Смит-Джонс Экспресс-доставка цифровых товаров с периодическими подписками PHP: переменная не работает внутри функции? получить json, используя php Регулярное выражение извлекает переменную JavaScript в PHP Как создать подкатегории подкатегорий Codeigniter не может удалять строки из таблицы базы данных, используя метод join Используйте array_multisort () с пользовательской функцией Получение идентификатора электронной почты отправителя при получении писем от Gmail SimpleXMLElement не может быть найден при работе с пространствами имен Как я могу поймать ошибку, вызванную mail ()?

Сохранение возможностей автозаполнения с помощью инъекции Symfony2 Dependency Injection

Я использую PHP Storm в качестве моей IDE, но я считаю, что другие IDE, такие как Netbeans, будут иметь такую ​​же проблему, как я объясню ниже.

При использовании структуры, такой как Symfony2, у нас есть замечательный мир Injection Dependency. Таким образом, объекты можно просто создать с помощью кода, например, следующего фрагмента:

$myThingy = $this->get('some_cool_service'); 

Это очень удобно, поскольку объекты уже настроены заранее. Одна из проблем заключается в том, что автоматическое завершение полностью разбивается в основном на любую PHP IDE, поскольку среда IDE не знает, какой тип возвращает метод get ().

Есть ли способ сохранить автозаполнение? Будет ли создание, например, расширением Controller, ответом? Например:

 class MyController extends Controller { /** * @return \MyNamespace\CoolService */ public getSomeCoolService() { return new CoolService(); } } 

а затем для контроллеров приложений укажите MyController в качестве базового класса вместо Controller?

Как насчет использования класса Factory или любых других возможных методов?

Это больше связано, но вы все еще можете сделать это с помощью eclipse PDT:

 $myThingy = $this->get('some_cool_service'); /* @var $myThingy \MyNamespace\CoolService */ 

UPDATE : пример на этой странице показывает, что вы также можете использовать другой путь с помощью phpStorm:

 $myThingy = $this->get('some_cool_service'); /* @var \MyNamespace\CoolService $myThingy */ 

Вы можете определить частные свойства в своих контроллерах

 class MyController extends Controller { /** * @var \Namespace\To\SomeCoolService; */ private $my_service; public function myAction() { $this->my_service = $this->get('some_cool_service'); /** * enjoy your autocompletion :) */ } } 

Я использую базовый класс контроллера для пакета. Вы должны аннотировать возврат в методе. По крайней мере, это работает на Eclipse.

 /** * Gets SomeCoolService * * @return \Namespace\To\SomeCoolService */ protected function getSomeCoolService() { return $this->get('some_cool_service'); } 

Мне не нравится / * var … * /, потому что он слишком сильно вписывается в код. Мне не нравятся частные свойства, потому что вы можете ошибочно предположить, что службы уже загружены.

Я использую Komodo Studio, а тегирование переменных с помощью @var, даже внутри методов, сохраняет автоматическое завершение для меня.

 namespace MyProject\MyBundle\Controller; use Symfony\Component\DependencyInjection\ContainerAware; use Symfony\Component\HttpFoundation\Request; class WelcomeController extends ContainerAware { public function indexAction() { /*@var Request*/$request = $this->container->get('request'); $request->[autocomplete hint list appears here] } } 

работа с netbeans IDE 7.1.2 PHP