2013-02-26 5 views
6

Zaczynam się rozwijać z symfony 2 i używa on zastrzyku zależności uzależnienia. Chciałbym wiedzieć, czy jest jakiś sposób, który sprawia, że ​​netbeans wykrywa typ obiektu w oparciu o ciąg i automatycznie uzupełniane z ich metod?Jak automatycznie uzupełnić metody z Symfony 2 DI w netbeans

Na przykład $this->container->get('doctrine') zwraca instancję Doctrine\Bundle\DoctrineBundle\Registry. W pojemniku klucz doctrine odpowiada Doctrine\Bundle\DoctrineBundle\Registry.

Coś w tym stylu, może być przydatne również dla zendframework 2.

Nie chcę tworzyć nowych metod w kontrolerze ani używać/* @var $ var Symfony ... * /, automatycznie wykrywałem.

Odpowiedz

4

Z tego co wiem, nie ma możliwości, aby IDE wykryło typ obiektu, który powraca z twojego kontenera. Moim rozwiązaniem jest zawarcie tych wywołań do kontenera w prywatne funkcje gettera. IMHO poprawia to również czytelność kodu - szczególnie, jeśli wykonujesz to połączenie więcej niż jeden raz w klasie.

/** 
* @return \Doctrine\Bundle\DoctrineBundle\Registry 
*/ 
private function getDoctrine() 
{ 
    return $this->container->get('doctrine'); 
} 
+0

Tak wiem, ale to rozwiązanie nie jest jeszcze to, co szukam. Otworzyłem problem sugerujący to na http://netbeans.org/bugzilla/show_bug.cgi?id=226725 – dextervip

+1

To też robię, +1, chociaż ogólnie "chroniony" powinien być preferowany niż "prywatny", chyba że istnieje szczególny powód, dla którego (teoretyczna) klasa dzieci nie powinna używać gettera. – halfer

0

IDE "PhpStorm" pozwala sugerować deklaracje "użytkowania". A to IDE proponuje specjalne funkcje dla Symfony2 i Drupala!

edytowany przez JetBrains: http://www.jetbrains.com/phpstorm/

Nie za darmo, ale moc wystarczy, aby zmniejszyć czas czas developpement pełny (a czas to pieniądz ...)

Enjoy:)

0

phpStorm:

$foobar= $this->get('foobar'); //returns mixed 
/* @var \MyNamespace\FooBar $foobar*/ 

lub

$foobar= $this->get('foobar'); //returns mixed 
/* @var FooBar $foobar*/ 

Można to zrobić z Eclipse PDT:

$foobar= $this->get('foobar'); //returns mixed 
/* @var $foobar \MyNamespace\FooBar*/ 
0

(Spacer) Gdy chodzi o usługi Symfony:

Zamiast

$doctrine = $this->container->get('doctrine'); 

użycie

$doctrine = $this->getDoctrine(); 

Jak możesz zobaczyć, Symfony pozwala ci uzyskać dostęp do większości usług s bezpośrednio ze zmiennej $this. NetBeans będzie wiedział, jakiego automatycznego uzupełniania użyć.

Pozwala spojrzeć dlaczego to działa (wewnątrz klasy Controller)

enter image description here

Jest to możliwe, ponieważ klasa import klasy Controller Registry ze stwierdzeniem USE,

use Doctrine\Bundle\DoctrineBundle\Registry; 

, a następnie w Adnotacja komentarzy do metody deklaruje zwracający typ obiektu z

/* 
* @return Registry 
*/ 

Jeśli zadzwonisz do $ this-> container-> get ('doctrine'); bezpośrednio wtedy automatyczne uzupełnianie zostanie pominięte i będziesz musiał użyć tego, co poniżej.

(odpowiedź) Żadne magiczne automatyczne uzupełnianie nie działa. Użyj Php Storm (robi to, o co prosisz). Dla tych, którzy zdecydują się trzymać z NetBeans, należy użyć adnotacji ręcznej, jak w przykładzie poniżej:

Możemy wskazać NetBeans na klasę, której powinna używać do automatycznego uzupełniania.

1) W terminalu od przeszukania katalogu projektu dla służby chcesz importować:

php debugowania bin/console: pojemnik

Jeśli wiesz czego szukasz wykorzystania tego Zamiast:

php bin/console d: container | grep doktryna

...

doktryna --------------------------------- ----------------------- Doctrine \ Bundle \ DoctrineBundle \ Registry

...

2) Jeśli nie jest to korzystanie z usługi get_class() Funkcja PHP wbudowana w funkcję, aby uzyskać nazwę klasy obiektu danej zmiennej. Lub użyj klasy odbicia. To zależy od Ciebie.

3) Gdy znasz nazwę klasy oświadczenie USE deklaruję lepszej czytelności

use Doctrine\Bundle\DoctrineBundle\Registry; 

4) Teraz wen wiemy jaka jest nazwa klasy instancji obiektu w konkretnej zmiennej jesteśmy gotowi do informowania NetBeans o co wiemy, za pomocą adnotacji komentarzy, aby umożliwić automatyczne uzupełnianie.

/** 
    * @var $doctrine Registry 
    */ 
    $doctrine = $this->container->get('doctrine'); 

Teraz automatyczne uzupełnianie jest włączone. Wpisz

$doctrine->| 

następnie naciśnij Ctrl + Spacja .Patrz zdjęcie poniżej:

enter image description here