application.ini에 정의 된 값이 있습니다.application.ini에서 값 읽기
conditions.time= 50
어떻게 zend action에서 zend 방식으로 읽을 수 있습니까?
application.ini에 정의 된 값이 있습니다.application.ini에서 값 읽기
conditions.time= 50
어떻게 zend action에서 zend 방식으로 읽을 수 있습니까?
내 접근 방식은 응용 프로그램의 어느 곳에서나 사용할 수 있습니다.
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의 기능은 parse_ini_file()입니다.
당신은, 당신은 당신이 원하는 값을 저장할 수 Zend_Config_Ini
$config = new Zend_Config_Ini('my/ini/file.ini');
echo $config->conditions->time; // 50
을 사용할 수 있습니다 귀하의 레지스트리는 다음과 같습니다 :
public function _initConditions()
{
$config = $this->getOptions();
if (isset($config['conditions']))
{
$registry = Zend_Registry::getInstance();
$registry->conditions = $config['conditions'];
}
}
그런 다음 여기에서 설정 한 것과 같은 방식으로 레지스트리를 사용하여 조건에 액세스 할 수 있습니다.
; application.ini
My.conditions.time= 50
당신은이 같은 컨트롤러에서 사용할 수 있습니다 :
당신은 접두사로 응용 프로그램 네임 스페이스를 넣어야 할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);
}
}
: 여기
응용 프로그램의 Bootstrap.php
가 $this->getOptions()
를 사용하여 application.ini
에 액세스 할 수 있습니다 사용할 수 있습니다 당신은 getenv('conditions.time')
$config = $this->_helper->config();
$this->view->time = $config['conditions']['time'];
정적 노드로 작동하지 않는다는 점을 제외하면 이것은 훌륭한 도우미입니다. 가능한 경우 전면 제어기에서 부트 스트랩을 가져와야합니다. 다음으로 확인해야 할 것은 config 배열 키가 존재한다는 것입니다. – takeshin
이렇게하면 구성 파일을 적어도 두 번 읽는 것이 좋습니다 = 권장하지 않습니다. 이러한 값은 이미 메모리에 있습니다 (프론트 컨트롤러의 * bootstrap * param에 있음), 거기에서 값을 가져와야합니다. – takeshin