2010-03-18 16 views
6

Estoy trabajando en la reformulación de código de la parte de carga del archivo de configuración en PHP. Anteriormente estaba usando varios archivos 'ini', pero ahora planeo ir a un archivo XML único que contendrá todos los detalles de configuración del proyecto. El problema es que si alguien quiere un archivo de configuración en ini o DB o cualquier otra cosa y no el predeterminado (en este caso XML), mi código debería manejar esa parte.Administrador de configuración para PHP

Si alguien quiere ir a otra opción de configuración como ini, tendrá que crear un archivo ini similar a mi archivo de configuración XML y mi administrador de configuración se encargará de todo, como el análisis y el almacenamiento en caché. Para eso necesito un mecanismo que permita decir la interfaz adecuada para mis datos de configuración donde el almacén de datos subyacente puede ser cualquier cosa (XML, DB, ini, etc.) y no quiero que dependa de estos almacenes subyacentes y en cualquier momento en el futuro esto debería ser extensible a otros formatos de archivo.

Respuesta

5

Suponiendo que está queriendo utilizar una clase para manejar todo esto, usted tiene 3 opciones:

  1. tienen una clase base llamada algo así como, a continuación, ReadConfigurationBase 3 clases de implementación, ReadConfigurationXML, ReadConfigurationINI y ReadConfigurationDatabase y usted tendría que elegir la correcta
  2. igual que el anterior, pero utilizando una fábrica para elegir, con sede fuera de algo que se ha pasado. al igual que si se pasa config.xml sabría volver ReadConfigurationBase implementado utilizando ReadConfigurationXML
  3. Tiene una clase llamada ReadConfiguration y actúa como el paso 2, pero crea, contiene y posee las otras 3 clases.

Las 3 clases no básicas simplemente sabrían cómo leer ese tipo de archivo de configuración, y pasarían la información de manera genérica. piense a lo largo de las líneas de una interfaz: usted sabe que puede obtener los datos, pero no le importa cómo.

Sugeriría la opción 3, ya que haría la vida más fácil. Tendría que hacer un poco de modificación cada vez que quiera agregar un método de almacenamiento, pero eso solo agregaría un poco a la clase ReadConfiguration.

Hay una manera de hacerlo 100% dinámico, pero eso complicaría las cosas, y no creo que realmente lo necesite para esto.

+0

+1 para mostrar cómo hacer bricolaje. –

+0

Gracias por la respuesta. ¿Puedes elaborar una tercera opción con un poco más de detalle? – Jack

3

Eche un vistazo a Zend_Config. Proporciona adaptadores para Arrays, Xml e Inis. Al igual que todos los componentes en Zend Framework, puede usarse aislado del Framework restante. Incluso si no desea usarlo, está bien diseñado y puede obtener algunas ideas para su propio administrador de configuración.

+0

+1 por mencionar ZF. –

Cuestiones relacionadas