2009-03-05 12 views
4

私は自分のZend Frameworkアプリケーションをテストしており、特定のキーがレジストリに設定されていないときに何かが起こるかどうかテストしたいと思います。これは私がテストしている機能です:Zend Framework:Zend_Registryで鍵を解除するには?

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

更新:私が本当に知りたいことは、設定ファイルで「ドメイン」キーがないときに、私は私のメソッドが例外をスローすることをテストする方法でありますセット。

+0

あなたが私の答えで与えられたアドバイスに従うならば、これはあなたがテストしてみましょう必要があります例外がスローされることを示します。それ以外の場合は、おそらくそれを受け入れたいですか? – tombazza

+0

私はあなたの答えをここに見つけるかもしれないと思います:[http://framework.zend.com/issues/browse/ZF-2752](http://framework.zend.com/issues/browse/ZF-2752) – typeoneerror

答えて

7

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

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

しかし、これはあなたがそれをレジストリに最初の時間を設定する前に、編集可能にZend_Configオブジェクトを設定していなければならないだろう動作するようにするために。

この方法でレジストリを編集するのはベストプラクティスではないと考えるべきです。特に、Zend_Configオブジェクトは、一度インスタンス化されると静的になるように設計されています。

私はあなたの問題を十分に理解してくれることを望みます。タイトルなZend_Registryキーの設定を解除するために、頼む何を達成するためにお探しの方に

+1

私はもうこのプロジェクトで作業していないので、私はあなたの答えを確認する機会がなかったので、私はそれをユーザーの投票数に基づいて受け入れています。 – Andrew

1

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

おそらく

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

アペンド$allowModificationsのparamでbootstrap.phpZend_Config_Iniを作成します。

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

That's正確に私が取得しているエラーメッセージ:Zend_Registryは読み取り専用です。私はそれを偽造する方法が必要です。おそらく実際にそれを「設定解除」するのではなく、それを行う別の方法があります。 – Andrew

+0

Zend_RegistryかZend_Config? – vartec

0

は試してみてください。

unset($config->domain); 

、変更と、その後再登録クラス。 vartecが言ったように、あなたが編集可能としてあなたZend_Configインスタンスをインスタンス化する必要があるでしょう、ということに注意してください:あなたが呼び出ししようとしている

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

__unset方法は、インスタンス上でunsetを使用するときに呼び出されるmagic methodです。

+0

unset($ config-> domain)は$ config - > __ unset( 'domain')を呼び出すため、何の違いもありません。 – vartec

0

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

0

:によって

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

関連する問題