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?
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?
È 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...
}
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.
+1, la tua risposta è più chiara e corretta per me come sopra. È meglio chiedere servizi - e non per pacchetti. – Besnik
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.
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 –