2011-08-19 4 views
1

J'ai essayé d'utiliser $ element-> addPrefixPath() pour charger mon validateur personnalisé mais il ne trouverait pas la classe tant que je n'aurais pas ajouté un autoload d'espace de noms au fichier ini.Zend framework - addPrefixPath et namespaces

Je pensais que le point entier de addPrefixPath était de charger uniquement la classe de validateur pour le formulaire et non l'ensemble de l'application. Est-ce correct?

+0

Avez-vous ajouté un chemin absolu ou relatif? –

Répondre

0

Cela dépend de la façon dont vous invoquez le validateur et l'attacher à l'élément:

  1. En utilisant une instance
  2. L'utilisation du format "abrégé" (ma propre terminologie)

Comme une instance :

$validator = new My_Validate_SomeValidator(array(
    'option1' => 'value1', 
    'option2' => 'value2', 
)); 
$element->addValidator($validator, true); 

Dans ce cas, vous instanciez le validateur vous-même. Par conséquent, l'ajout de My_ en tant qu'espace de noms d'autochargeur est requis.

Alternativement, en utilisant le format "abrégé":

$element->addValidator(array('SomeValidator', array(
    'option1' => 'value1', 
    'option2' => 'value2', 
), true); 

ou

$element->setValidators(array(
    array('EmailAddress', true), 
    array('SomeValidator', true, array(
     'option1' => 'value1', 
     'option2' => 'value2', 
    ), 
)); 

Dans ce cas, vous donnez l'élément seulement un nom abrégé - 'SomeValidator' - pour le validateur, attend implicitement l'élément pour gérer l'instanciation. Il est donc logique que l'élément doive recevoir des informations sur l'espace de nom et le chemin afin qu'il puisse faire le travail.