Question

Je teste mon application Zend Framework et voudrais vérifier que quelque chose se produit lorsqu'une clé particulière n'est pas définie dans le registre. C’est la fonction que je teste:

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;
}

Comment puis-je supprimer une clé dans le registre? J'ai essayé cela, mais cela n'a pas fonctionné:

$config = Zend_Registry::get('config');
$config->__unset('domain');

Mise à jour: Ce que je veux vraiment savoir, c'est comment puis-je tester le fait que ma méthode lève une exception lorsque le champ "domaine"? La clé dans le fichier de configuration n'est pas définie.

Était-ce utile?

La solution

Le seul moyen de changer la valeur de l'objet config serait de le vider d'une variable, de désélectionner l'élément en question, de demander au registre de supprimer la clé pour config, puis de le réinitialiser.

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

Cependant, pour que cela fonctionne, vous devez d'abord définir l'objet Zend_Config comme éditable avant de le définir pour la première fois dans le registre.

Vous devez considérer qu’il n’est pas recommandé de modifier le registre de cette manière. En particulier, l'objet Zend_Config est conçu pour être statique une fois qu'il est instancié à l'origine.

J'espère avoir bien compris votre problème!

Autres conseils

Si votre 'configuration' est en réalité Zend_Config , il est par défaut en lecture seule. Le second paramètre facultatif du constructeur Zend_Config est booléen $ allowModifications , défini par défaut sur false .

Vous créez probablement Zend_Config_Ini dans bootstrap.php avec

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

ajouter $ allowModifications param:

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

Essayez:

unset($config->domain);

Et ensuite ré-enregistrez $ registry- & confg avec la classe Zend_Config modifiée. Notez que, comme vartec l'a dit, vous devrez instancier votre instance Zend_Config comme modifiable:

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

La méthode __ unset que vous essayez d'appeler est une méthode magique appelée lorsque vous utilisez unset sur l'instance.

Je vois que vous essayez de supprimer une valeur dans $ config, où $ config est stocké dans Zend_Registry avant suppression. donc si supprimer la valeur n'affecte pas la valeur $ config stockée dans Zend_Registry, je suppose qu'en appelant Zend_Registry :: get (), vous avez la valeur de $ config et non une référence à la $ config dans Zend_Registry. ainsi, lorsque vous modifiez quelque chose dans $ config copié, cela n'affectera pas celui stocké. Je vous suggère de modifier d'abord la $ config, puis d'écraser la $ config dans le registre, en définissant de nouveau la $ config dans Zend_Registry.

Pour ceux qui cherchent à accomplir ce que le titre demande, désinstaller une clé 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);
        }
    }
}

Appelez par: Mon_Registre :: delete ('clé')

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top