2011-05-31 9 views
6

Mi chiedo se esiste un modo corretto per verificare le dipendenze.Dipendenze Symfony2

Ad esempio, ho uno NewsBundle. Ora dovrò controllare se c'è un CommentBundle. Se ce n'è uno, dovrebbe eseguire un altro codice.

Qualche suggerimento?

risposta

3

È possibile utilizzare class_exists nella classe Bundle principale che ogni bundle dovrebbe avere.

Ad esempio:

if (class_exists('Acme\CommentBundle\AcmeCommentBundle')) 
{ 
    // Bundle exists and is loaded by AppKernel... 
} 
+0

Caro @ Markymark, sei sicuro che questo ti darà il risultato giusto? Immagina una situazione: il bundle è presente sul filesystem, ma non è stato registrato in "AppKernel" (il che significa che né i percorsi del fascio né i servizi sono stati caricati). Non è vero che 'class_exists ('Some \ Name \ Space \ Class') proverà a caricare automaticamente la classe anche se non è stata registrata con il pacchetto? Mi chiedo cosa ne pensi? HTH –

24

Oltre alla risposta di Markymark, è possibile controllare se una specifica servizio esiste dal controller (o qualsiasi altro codice contenitore-aware) con il seguente frammento:

if ($this->container->has('foo_service.alias')) 
{ 
    // service is loaded and usable 
} 

Se non si è sicuri dell'alias esatto di un determinato servizio, o solo di calci e risatine, è possibile eseguire il comando console php app/console container:debug per vedere tutti i servizi registrati nel contenitore.

+3

+1, la tua risposta è più chiara e corretta per me come sopra. È meglio chiedere servizi - e non per pacchetti. – Besnik

0

La classe Kernel contiene un elenco di metodi di supporto per verificare se una determinata classe fa parte di un pacchetto attivo o se un pacchetto è registrato.

public BundleInterface[] getBundles() 
    Gets the registered bundle instances. 

public bool isClassInActiveBundle(string $class) 
    Checks if a given class name belongs to an active bundle.