2011-05-31 24 views
6

Me pregunto si existe una forma adecuada de verificar las dependencias.Dependencias Symfony2

Por ejemplo, tengo NewsBundle. Ahora tendré que verificar si hay un CommentBundle. Si hay uno, debería ejecutar algunos códigos más.

¿Alguna sugerencia?

Respuesta

3

Puede usar class_exists en la clase Bundle principal que debe tener cada paquete.

Por ejemplo:

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

Estimado @markymark, ¿está seguro de que esto le dará el resultado correcto? Imagina la situación: el paquete está presente en el sistema de archivos, pero no estaba registrado en 'AppKernel' (lo que significa que no se cargaron las rutas ni los servicios del paquete). ¿No es cierto que 'class_exists ('Some \ Name \ Space \ Class') intentará cargar automáticamente la clase incluso si no se ha registrado con el paquete? Me pregunto ¿qué piensas al respecto? HTH –

24

Además de la respuesta de markymark, se puede comprobar si un servicio específico existe desde el controlador (o cualquier otro código de contenedor-consciente) con el siguiente fragmento:

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

Si no está seguro del alias exacto de un servicio determinado, o simplemente de patadas y risitas, puede ejecutar el comando de consola php app/console container:debug para ver todos los servicios registrados en el contenedor.

+3

+1, su respuesta es más clara y correcta para mí que la anterior. Es mejor pedir servicios, y no paquetes. – Besnik

0

La clase Kernel contiene una lista de métodos auxiliares para comprobar si una determinada clase es parte de un paquete activo o si un paquete está registrado.

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

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