2011-05-31 5 views
6

Je me demande s'il existe un moyen approprié de vérifier les dépendances. Par exemple, j'ai NewsBundle. Maintenant, je vais devoir vérifier s'il y a un CommentBundle. S'il y en a un, il devrait exécuter un peu plus de code.Dépendances Symfony2

Des suggestions?

Répondre

3

Vous pouvez utiliser class_exists dans la classe principale de bundle que chaque bundle devrait avoir.

Par exemple:

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

Cher @markymark, êtes-vous sûr que cela vous donnera le bon résultat? Imaginez la situation: bundle est présent sur le système de fichiers, mais n'a pas été enregistré dans 'AppKernel' (ce qui signifie que ni les routes du bundle ni les services n'ont été chargés). N'est-il pas vrai que 'class_exists ('Some \ Name \ Space \ Class') va essayer de charger automatiquement la classe même si elle n'a pas été enregistrée avec le bundle? Je me demande ce que vous en pensez? HTH –

24

En plus de la réponse de markymark, vous pouvez vérifier si un un service spécifique existe à partir de votre contrôleur (ou tout autre code de conteneur-aware) avec l'extrait suivant:

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

Si vous n'êtes pas sûr de l'alias exact d'un service donné, ou juste pour des coups de pied et des fous rires, vous pouvez exécuter la commande de console php app/console container:debug pour voir tous les services enregistrés avec le conteneur.

+3

+1, votre réponse est plus claire et correcte pour moi que celle ci-dessus. Il vaut mieux demander des services - et non pour des paquets. – Besnik

0

La classe Kernel contient une liste de méthodes auxiliaires permettant de vérifier si une classe donnée fait partie d'un ensemble actif ou si un ensemble est enregistré.

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

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