4

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

更新:本当に知りたいのは、構成ファイルの「ドメイン」キーが設定されていない場合に、メソッドが例外をスローすることをどのようにテストすればよいかということです。

4

5 に答える 5

8

構成オブジェクトの値を変更する唯一の実際の方法は、それを変数にダンプし、問題の項目の設定を解除し、レジストリに構成のキーを削除するように依頼してから、リセットすることです。

<?php
$registry = Zend_Registry::getInstance();
$config = $registry->get('config');
unset($config->domain);
$registry->offsetUnset('config');
$registry->set('config', $config);
?>

ただし、これを機能させるには、最初にレジストリに設定する前に、Zend_Configオブジェクトを編集可能に設定する必要があります。

この方法でレジストリを編集することはベストプラクティスではないことを考慮する必要があります。特に、Zend_Configオブジェクトは、最初にインスタンス化されると静的になるように設計されています。

私はあなたの問題を十分に理解したと思います!

于 2009-03-06T12:56:18.123 に答える
1

'config'が実際にZend_Configである場合、デフォルトでは読み取り専用です。 Zend_Configコンストラクターのオプションの2番目のパラメーターはブール値$allowModificationsであり、デフォルトではに設定されていますfalse

あなたはおそらくで作成しZend_Config_Iniますbootstrap.php

new Zend_Config_Ini(APPLICATION_PATH . '/config/app.ini', 
                    APPLICATION_ENVIRONMENT)

$allowModificationsパラメータを追加:

new Zend_Config_Ini(APPLICATION_PATH . '/config/app.ini', 
                    APPLICATION_ENVIRONMENT, 
                    true)
于 2009-03-05T17:56:18.677 に答える
0

試す:

unset($config->domain);

$registry->config次に、変更したZend_Configクラスに再登録します。vartecが言ったように、Zend_Configインスタンスを編集可能としてインスタンス化する必要があることに注意してください。

$config = new Zend_Config('filename', true);

__unset呼び出そうとしているメソッドは、インスタンスで使用するときに呼び出される魔法のメソッドです。unset

于 2009-03-05T18:21:16.917 に答える
0

$config の値を削除しようとしているようです。$config は削除前に Zend_Registry に保存されています。したがって、値を削除しても Zend_Registry に保存されている $config の値に影響がない場合は、Zend_Registry::get() を呼び出すことで、Zend_Registry の $config への参照ではなく、$config の値を取得していると思います。したがって、コピーした $config で何かを変更しても、保存されているものには影響しません。最初に $config を変更してから、Zend_Registry で $config を再度設定して、レジストリの $config を上書きすることをお勧めします。

于 2009-03-05T18:26:39.493 に答える
0

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

于 2011-05-25T19:05:00.960 に答える