2013-02-26 11 views
6

Sto iniziando a sviluppare con symfony 2 e utilizza un'iniezione di dipendenza molto. Vorrei sapere se esiste un modo in cui i netbeans rilevano il tipo di oggetto in base alla stringa e si completano automaticamente con i loro metodi?Come completare automaticamente i metodi da Symfony 2 DI in netbeans

Ad esempio, $this->container->get('doctrine') restituisce un'istanza Doctrine\Bundle\DoctrineBundle\Registry. Nel contenitore, la chiave doctrine corrisponde a Doctrine\Bundle\DoctrineBundle\Registry.

Qualcosa del genere, potrebbe essere utile anche per zendframework 2.

Non voglio creare nuovi metodi nel controller e non usare/* @var $ var Symfony ... * /, vorrei il rilevamento automatico.

risposta

4

Per quanto ne so, non c'è modo per un IDE di rilevare il tipo dell'oggetto restituito dal contenitore. La mia soluzione è quella di avvolgere quelle chiamate al contenitore in funzioni private getter. IMHO migliora anche la leggibilità del codice, specialmente se si fa questa chiamata più di una volta per classe.

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

Sì, lo so, ma questa soluzione non è ancora quello che sto cercando. Ho aperto un problema suggerendolo a http://netbeans.org/bugzilla/show_bug.cgi?id=226725 – dextervip

+1

Questo è quello che faccio pure, +1 - anche se in generale 'protected' dovrebbe essere preferito a' private' a meno che c'è una ragione specifica per cui una classe (teorica) non dovrebbe usare il getter. – halfer

0

L'IDE "PhpStorm" consente di suggerire dichiarazioni di "uso". E questo IDE propone funzionalità specifiche per Symfony2 e Drupal!

a cura di JetBrains: http://www.jetbrains.com/phpstorm/

Non libero, ma il potere sufficiente a ridurre il tempo di DEVELOPPEMENT tempo pieno (e il tempo è denaro ...)

Enjoy:)

0

PhpStorm:

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

o

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

È possibile farlo con Eclipse PDT:

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

(Passeggiata intorno) quando si tratta di servizi di Symfony:

Invece di

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

uso

$doctrine = $this->getDoctrine(); 

Come puoi vedere che Symfony ti consente di accedere a gran parte del servizio s direttamente dalla variabile $this. NetBeans saprà quale completamento automatico utilizzare.

Diamo un'occhiata perché questo funziona (all'interno classe Controller)

enter image description here

E 'possibile perché la classe importazioni classe controller del Registro di sistema con istruzione USE,

use Doctrine\Bundle\DoctrineBundle\Registry; 

e poi in annotazione del commento metodo dichiara il tipo di oggetto restituito con

/* 
* @return Registry 
*/ 

Se si chiama $ this-> container-> get ('doctrine'); direttamente il completamento automatico verrà omesso e dovrai utilizzare le seguenti informazioni.

(Risposta) Nessun completamento automatico magico funziona finora. Utilizza Php Storm (fa ciò che tu richiedi). Per coloro che scelgono di utilizzare NetBeans, è necessario utilizzare l'annotazione manuale come nell'esempio seguente:

Possiamo indicare NetBeans a una classe che deve essere utilizzata per il completamento automatico.

1) Nel terminale di ricerca directory del progetto per il servizio che si desidera importare:

php bin/console di debug: contenitore

Se si sa cosa si cerca di utilizzare questo, invece:

contenitore php/console d: contenitore | grep dottrina

...

dottrina --------------------------------- ----------------------- Doctrine \ Bundle \ DoctrineBundle \ Registry

...

2) Se questo non è un servizio utilizza get_class() PHP build in function per ottenere il nome classe dell'oggetto la variabile particolare. Oppure usa la classe di riflessione. Tocca a voi.

3) Una volta che si conosce il nome della classe istruzione Declare USO per una migliore leggibilità

use Doctrine\Bundle\DoctrineBundle\Registry; 

4) Ora wen sappiamo qual è il nome della classe dell'istanza oggetto in particolare variabile siamo pronti a informare i NetBeans su ciò che sappiamo usando le annotazioni dei commenti in modo che possa abilitare il completamento automatico.

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

Ora il completamento automatico è abilitato. Type

$doctrine->| 

quindi premere Ctrl + Spazio .Vedere l'immagine qui sotto:

enter image description here

Problemi correlati