Zend Framework : Zend_registry에서 키를 설정하지 않는 방법은 무엇입니까?
-
03-07-2019 - |
문제
Zend Framework 응용 프로그램을 테스트하고 있으며 특정 키가 레지스트리에서 설정되지 않을 때 어떤 일이 발생하는지 테스트하고 싶습니다. 이것이 내가 테스트하는 기능입니다.
protected function getDomainFromConfig() {
$config = Zend_Registry::get('config');
if (!isset($config->domain)) {
throw new Exception('Please make sure you have "domain" set in your config file and your config file is being set in the Zend_Registry.');
}
return $config->domain;
}
레지스트리에서 키를 설정하지 않으려면 어떻게해야합니까? 나는 이것을 시도했지만 작동하지 않았다.
$config = Zend_Registry::get('config');
$config->__unset('domain');
업데이트: 내가 알고 싶은 것은 구성 파일의 "도메인"키가 설정되지 않았을 때 내 메소드가 예외를 테스트하는 방법입니다.
해결책
구성 객체의 값을 변경하는 유일한 방법은 변수로 덤프하고 문제의 항목을 설정하지 않고 레지스트리에 구성을 위해 키를 삭제 한 다음 재설정하는 것입니다.
<?php
$registry = Zend_Registry::getInstance();
$config = $registry->get('config');
unset($config->domain);
$registry->offsetUnset('config');
$registry->set('config', $config);
?>
그러나 이것이 작동하려면 Zend_config 객체를 처음으로 레지스트리에 설정하기 전에 편집 가능한 것으로 설정해야합니다.
이런 식으로 레지스트리를 편집하는 것이 가장 모범 사례가 아니라는 점을 고려해야합니다. 특히 Zend_config 객체는 원래 인스턴스화되면 정적으로 설계되었습니다.
나는 당신의 문제를 충분히 이해했으면 좋겠다!
다른 팁
'config'가 실제로 인 경우 Zend_Config
, 그런 다음 기본적으로 읽기 전용입니다.Zend_Config
생성자의 선택적 두 번째 매개 변수는 부울입니다 $allowModifications
, 기본적으로 false
.
당신은 아마 만들 것입니다 Zend_Config_Ini
안에 bootstrap.php
~와 함께
new Zend_Config_Ini(APPLICATION_PATH . '/config/app.ini',
APPLICATION_ENVIRONMENT)
추가 $allowModifications
param :
new Zend_Config_Ini(APPLICATION_PATH . '/config/app.ini',
APPLICATION_ENVIRONMENT,
true)
노력하다:
unset($config->domain);
그런 다음 다시 등록하십시오 $registry->config
수정 된 Zend_Config
수업. Vartec이 말했듯이, 당신은 당신의 Zend_Config
편집 가능한 인스턴스 :
$config = new Zend_Config('filename', true);
그만큼 __unset
전화하려고하는 방법은 a입니다 마법 방법 그것은 당신이 사용할 때 호출됩니다 unset
인스턴스.
삭제 전에 $ config가 Zend_registry에 저장되는 $ config에서 값을 삭제하려고하는 것을보고 있습니다. 따라서 값을 삭제하면 Zend_registry에서 저장된 $ 구성 값에 영향을 미치지 않으면 zend_registry :: get ()를 호출하면 Zend_registry의 $ config에 대한 참조가 아닌 $ config의 값이 있다고 가정합니다. 따라서 복사 된 $ 구성에서 무언가를 변경하면 저장된 구성에 영향을 미치지 않습니다. 먼저 $ 구성을 변경 한 다음 Zend_registry에서 $ config를 다시 설정하여 레지스트리에서 $ 구성을 덮어 쓰는 것이 좋습니다.
제목이 요구하는 것을 달성하려는 사람들을 위해 Zend_registry 키를 설정하지 않도록하십시오.
class My_Registry extends Zend_Registry
{
/**
*
* @param type $index
*/
public static function delete($index)
{
$instance = self::getInstance();
if ($instance->offsetExists($index)) {
$instance->offsetUnset($index);
}
}
}
전화 : My_Registry::delete('key')