he un valor que se define en application.inileer un valor application.ini
conditions.time= 50
¿Cómo puedo leerlo en una acción Zend Zend el camino?
he un valor que se define en application.inileer un valor application.ini
conditions.time= 50
¿Cómo puedo leerlo en una acción Zend Zend el camino?
Aquí está mi enfoque, que puede usar en cualquier lugar de la aplicación:
class My_Controller_Action_Helper_Options extends Zend_Controller_Action_Helper_Abstract
{
/**
* Options separator delimiterm e.g.
* option.subkey or
* option/subkey
*/
const DELIMITER = '.';
/**
* Retrieve application options from bootstrap
*
* @return array
*/
public function getOptions()
{
$front = $this->getFrontController();
$bootstrap = $front->getParam('bootstrap');
if (null === $bootstrap) {
throw new Exception('Unable to find bootstrap');
}
return $bootstrap->getOptions();
}
/**
* Get array key if exists, otherwise returns null
*
* @param array $values
* @param string $key
* @return mixed
*/
private static function _getValue($values, $key)
{
if (is_array($values) && isset($values[$key])) {
return $values[$key];
}
return null;
}
/**
* Get application option form bootstrap
*
* @example
* $options = Zend_Controller_Action_HelperBroker::getStaticHelper('options')
* ->get('conditions.time', 'defaultvalue');
*
* @param string $section
* @param mixed $default
* @return Zend_Config
*/
public function get($section = null, $default = null)
{
$value = $this->getOptions();
if (null !== $section && is_string($section)) {
if (false === strpos($section, self::DELIMITER)) {
$value = $this->_getValue($value, $section);
} else {
$sections = explode(self::DELIMITER, $section);
foreach ($sections as $section) {
$value = $this->_getValue($value, $section);
if (null === $value) {
break;
}
}
}
}
if (null === $value) {
return $default;
}
return $value;
}
/**
* @param string $section
* @param mixed $default
* @return Zend_Config
*/
public function direct($section = null, $default = null)
{
return $this->get($section, $default);
}
}
PHP tiene una función parse_ini_file().
Usted puede ser capaz de utilizar getenv('conditions.time')
Puede utilizar Zend_Config_Ini
$config = new Zend_Config_Ini('my/ini/file.ini');
echo $config->conditions->time; // 50
de la aplicación Bootstrap.php
tiene acceso a la application.ini
usando $this->getOptions()
, podría almacenar el valor que desee en su registro algo como esto:
public function _initConditions()
{
$config = $this->getOptions();
if (isset($config['conditions']))
{
$registry = Zend_Registry::getInstance();
$registry->conditions = $config['conditions'];
}
}
A continuación, podría acceder a sus condiciones mediante el registro, de la misma manera que las configuró aquí.
¿Qué sentido tiene almacenar en el registro, en lugar de leer directamente de bootstrap? – takeshin
Porque cada vez que necesita el valor, el programa de arranque puede o no estar fácilmente disponible cuando lo necesite? No todos los códigos que necesitan configuración están definidos en los Controladores ... – gnarf
Aquí es un ayudante de acción para que:
class My_Controller_Action_Helper_Config
extends Zend_Controller_Action_Helper_Abstract
{
/**
* @return array
*/
public function direct()
{
$bootstrap = $this->getActionController()->getInvokeArg('bootstrap');
$ns = strtolower(trim($bootstrap->getAppNamespace(), '_'));
return $bootstrap->getOption($ns);
}
}
Tienes que poner el espacio de nombres de aplicaciones como prefijo:
; application.ini
My.conditions.time= 50
Usted puede utilizarlo en un controlador de la siguiente manera:
$config = $this->_helper->config();
$this->view->time = $config['conditions']['time'];
Este es un buen ayudante, excepto que no funcionará como uno estático. Debería obtener el bootstrap del controlador frontal si está disponible. Lo siguiente que debe verificar es que las claves de arreglo de configuración sí existen. – takeshin
Esto hace que el archivo de configuración se lea al menos dos veces = no recomendado. Esos valores ya están en la memoria (en el * bootstrap * param del controlador frontal), por lo que debe recuperarlos desde allí. – takeshin