2013-02-26 7 views
6

Ich fange an, sich mit symfony 2 zu entwickeln, und es benutzt viel Abhängigkeitsinjektion. Ich würde gerne wissen, ob es eine Möglichkeit gibt, die Netbeans dazu bringt, den Objekttyp anhand der Zeichenkette zu erkennen und automatisch mit ihren Methoden zu vervollständigen.Wie man Methoden von Symfony 2 DI in netbeans automatisch beendet

Zum Beispiel gibt $this->container->get('doctrine') eine Doctrine\Bundle\DoctrineBundle\Registry Instanz zurück. In dem Behälter entspricht der Schlüssel doctrineDoctrine\Bundle\DoctrineBundle\Registry.

So etwas könnte für Zendframework 2 auch nützlich sein.

Ich möchte keine neuen Methoden in der Steuerung erstellen und auch nicht/* @var $ var Symfony ... * /, würde ich automatische Erkennung.

Antwort

4

Soweit ich weiß, gibt es keine Möglichkeit für eine IDE, den Typ des Objekts zu erkennen, das Ihr Container zurückgibt. Meine Lösung besteht darin, diese Aufrufe an den Container in private Getter-Funktionen zu verpacken. IMHO verbessert dies auch die Lesbarkeit des Codes - besonders, wenn Sie diesen Aufruf mehr als einmal pro Klasse durchführen.

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

Ja, ich weiß, diese Lösung, aber es ist noch nicht, was ich suche. Ich öffnete ein Problem, das es auf http://netbeans.org/bugzilla/show_bug.cgi?id=226725 – dextervip

+1

vorschlägt. Das ist, was ich auch tue, +1 - obwohl im Allgemeinen "geschützt" sollte zu "privatem" vorgezogen werden, es sei denn Es gibt einen bestimmten Grund, warum eine (theoretische) Kindklasse den Getter nicht verwenden sollte. – halfer

0

Die IDE "PhpStorm" erlaubt es, "verwenden" Deklarationen vorzuschlagen. Und diese IDE bietet spezifische Funktionen für Symfony2 und Drupal!

von JetBrains bearbeitet: http://www.jetbrains.com/phpstorm/

Nicht kostenlos, aber Macht voll genug Zeit developpement Zeit zu reduzieren (und Zeit ist Geld ...)

Enjoy:)

0

PhpStorm:

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

oder

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

Sie können dies mit Eclipse PDT:

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

(Walk around) Wann Symfony Dienste kommt:

Statt

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

Verwendung

$doctrine = $this->getDoctrine(); 

Wie Sie können sehen, Symfony ermöglicht Ihnen den Zugriff auf die meisten Dienste s direkt von $this Variable. NetBeans wird wissen, welche automatische Vervollständigung verwendet werden soll.

Werfen wir einen Blick, warum diese (innen Controller-Klasse)

mit USE-Anweisung enter image description here

Es ist möglich, da Controller-Klasse Importe Registry-Klasse arbeitet,

use Doctrine\Bundle\DoctrineBundle\Registry; 

und dann in Method Comment Annotation deklariert den zurückkehrenden Objekttyp mit

Wenn Sie $ this-> container-> get ('Doktrin') aufrufen; direkt dann wird die automatische Vervollständigung weggelassen und Sie müssen whats unten verwenden.

(Antwort) Keine magische Autovervollständigung funktioniert so weit. Benutze PHP Storm (es tut was du willst). Für diejenigen, die sich für NetBeans entscheiden, müssen Sie eine manuelle Anmerkung wie im folgenden Beispiel verwenden:

Wir können NetBeans auf eine Klasse verweisen, die es für die automatische Vervollständigung verwenden sollte.

1) Im Terminal von Projektverzeichnis Suche nach Service möchten Sie importieren:

php bin/console debug: Behälter

Wenn Sie wissen, was Sie für den Einsatz suchen Sie stattdessen:

php bin/konsole d: container | grep Lehre

...

Lehre --------------------------------- ----------------------- Lehre \ Bundle \ DoctrineBundle \ Registry

...

2) ist dies nicht der Fall ist ein Service verwenden get_class() PHP-Funktion zum Erstellen von Klassennamen des Objekts es bestimmte Variable. Oder verwende Reflektionsklasse. Es liegt an dir.

3) Sobald Sie den Klassennamen declare USE-Anweisung für eine bessere Lesbarkeit wissen

use Doctrine\Bundle\DoctrineBundle\Registry; 

4) Jetzt wen wir wissen, was der Name der Objektinstanz in bestimmten Variablen Klasse ist, dass wir bereit sind, NetBeans zu informieren über was wir wissen, indem wir Kommentaranmerkungen verwenden, damit die automatische Vervollständigung aktiviert werden kann.

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

Jetzt ist die automatische Vervollständigung aktiviert. Typ

$doctrine->| 

dann Strg + Leertaste drücken.Siehe das Bild unten:

enter image description here