문제

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')

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top