2017-01-25 8 views
0

J'ai un problème avec Zend-Framework2 où j'ai besoin de lire/écrire la valeur d'un champ différent dans le filtre d'un champ.Zend-framework-Accès aux autres champs de formulaire dans le filtre zf2

J'ai un formulaire qui obtient les données d'adresse d'un utilisateur: rue, numéro, numéroAddition, code postal, ville.

je dois séparer nombre et numberAddition, parce que j'ai des contraintes strictes quand je processus plus ces données. Le numéro doit être numérique (int) et numberAddition peut être une chaîne.

Exemple d'entrée utilisateur:
Numéro: 47a
numberAddition: [vide]

doit être filtré à:
Numéro : 47
numberAddition: un

I'D aime mettre en œuvre cela comme un filtre: si numberAddition est vide et le numéro n'est pas int puis split num ber en nombre et numéroAddition. Y a-t-il un moyen de le faire avec des filtres ou existe-t-il une meilleure approche?

Répondre

0

Ce n'est pas une bonne solution

Dans les deux FilterInterface et ValidatorInterface on ne peut voir aucune variable $context passé, donc la solution ci-dessous ne garantit pas une compatibilité avant (essentiellement quelqu'un peut retirer le $context et votre code ne fonctionnera plus, pas besoin d'attendre une version majeure pour le faire car il ne fait déjà pas partie des interfaces).

Dans votre code, vous pouvez toujours utiliser le $context comme maintenant vous savez ce que vous faites, p

Donc, en gros:

class MyFilter implements \Zend\Filter\FilterInterface 
{ 
    public function filter($value, array $context = null) 
    { 
     if ($array && isset($context['fieldName'])) { 
      // do whatever 
     } 
     return $valueFiltered; 
    } 
} 
+0

Je vois que 'context' $ est transmise par valeur et pas par référence. Je pense que je ne peux pas éditer la valeur alors dans le filtre A. Je pense que je dois écrire deux filtres (pour le numéro de champ et le champ numberAddition) mais je dois m'assurer que le filtre numberAddition est appelé avant le filtre numérique la valeur numérique non filtrée. Je suis allé faire ce travail dans le contrôleur avant que les données sont liées au formulaire. Mais je suis toujours à la recherche d'une solution où le formulaire est maître de ses données. – Eich

+0

Je dirais que la bonne solution pourrait être d'utiliser un hydrateur personnalisé pour hydrater l'objet lié au formulaire, mais je ne peux pas vraiment vous y aider. –