2011-02-13 23 views
8

Tengo una pregunta, ya que necesito tener una variable estática global y tengo alguna pregunta sobre la posibilidad de agregarla al archivo application.ini, ¿cómo hacerlo?Zend, variable global en Application.ini?

O tengo que:

  1. Crear clase abstracta con la variable estática,
  2. verlo en Zend_Registry tener acceso a esta variable a partir de todas las aplicaciones (registro en el archivo Bootstrap)
  3. que pueda usarlo, o no es más fácil, me refiero a "forma automática" para hacerlo?

Gracias por su asesoramiento! Regars,

+0

Los archivos de configuración están destinados a ser utilizados para especificar parámetros, utilizados como insumos para su aplicación licación. No debería agregar nada programáticamente – Phil

Respuesta

1

Puede especificar el valor en la aplicación.ini y en Bootsrap.php lo lee y guarda en Zend_Registry. También puedes usar el método PHP para crear constantes (si tu veriable es constante).

+0

+1 simplemente usando PHP globales. Por lo tanto, evitando la necesidad de acceso de clase estático Zend en una Vista. – Alex

6

La mejor solución para mí fue crear una variable en el archivo index.php. He agregado: defined ('VARIABLE_NAME') || define ('VARIABLE_NAME', 'Algo aquí');

Y ahora puedo acceder a él desde cualquier lugar; D ¡Muchas gracias!

12

en Application.ini presentar

someservice.apikey = 12345678 
someservice.passkey = 87654321 

de arranque

public function _initSomeservice() 
{ 
    $someservice = $this->getOption('someservice'); 
    Zend_Registry::set('someservice', $someservice); 
} 

para tirar del Registro

$config = Zend_Registry::get('someservice'); 
5

Yo no usaría la Zend_Registry ni constantes, por dos razones

  1. En el registro nunca está seguro de lo que sucedió con las variables. Cada parte de la aplicación puede cambiarlos y no se notarán. Veo el registro en realidad como un anit-pattern.
  2. Las constantes están contaminando su aplicación innecesariamente. ¿Qué pasa si usas para cada configuración alguna constante? Debe mantener un documento adicional con todas las constantes definidas, es horrible de mantener.

Lo que la mejor opción es, es obtener directamente el objeto config del programa de arranque. En próximos ejemplos, que se supone que tiene esto en su application.ini:

someservice.apikey = 12345678 
someservice.passkey = 87654321 

El arranque se establece como un parámetro en la frontController. Si tiene un controlador de acción, esto hace que sea tan simple como esto:

$serviceOptions = $this->getInvokeArg('bootstrap')->getOption('someservice'); 

Si usted tiene un servicio de instancia en su controlador, ahora puede pasarlas a través del constructor y/o colocador.

Si quiere obtener las opciones que no están dentro de su controlador, sino en otro lugar, puede usar el patrón singleton que implementa frontController.Por lo tanto en cualquier lugar (por supuesto, sólo durante la planificación, no durante el arranque en sí) que es capaz de hacer esto:

$frontController = Zend_Controller_Front::getInstance(); 
$serviceOptions = $frontController->getParam('bootstrap') 
            ->getOption('someservice'); 

Con método anterior que estés seguro que tiene siempre la opción de configuración derecho y no algunos posiblemente uno mutado

+0

Esto es lo que estaba buscando! ¡Gracias! – VishwaKumar

0

Acabo de agregar define ('VARIABLE_NAME', 'Algo aquí'); para arrancar. Constantes globales instantáneas.

Estas constantes se colocaron dentro de una función _intiFuncName protegido dentro de la rutina de carga se extiende clase

0

tengo una serie de constantes con la siguiente convención de nomenclatura en application.ini:

system.image_path = "/assets/images" 
system.custom_path = "/assets/custom" 
system.cdn_URL  = "http://cdnurl.com" 

Y acabo hacer referencia a ellos en mi código como si fueran constantes PHP:

SYSTEM_IMAGE_PATH 
SYSTEM_CUSTOM_PATH 
SYSTEM_CDN_URL