Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Salut,
Je me pose une petite question.
Lorsqu'on utilise Zend_Filter_Input par exemple de cette manière:
// Filtres et Test des champs saisis Zend_Loader::loadClass('Zend_Filter_Input'); Zend_Loader::loadClass('Zend_Filter_StringTrim'); $filters = array( '*' => 'StripTags', ); $validators = array( 'fmNom' => array('NotEmpty','messages' => 'Champ Nom non renseigné'), 'fmSociete' => array('NotEmpty','messages' => 'Champ Société non renseigné'), 'fmAdresse' => array('NotEmpty','messages' => 'Champ Rue non renseigné;'), 'fmCodepostal' => array('NotEmpty', 'Digits', 'messages' => array( 'Champ Code postal non renseigné', 'Le champ Code postal ne doit contenir que des chiffres' ) ), 'fmVille' => array('NotEmpty','messages' => 'Champ Ville non renseigné') ); $input = new Zend_Filter_Input($filters, $validators, $_POST); $input->setDefaultEscapeFilter(new Zend_Filter_StringTrim); if ($input->hasInvalid()) { $invalid_messages = $input->getMessages(); $errors_txt = 'Le message n\'a pas pu être envoyé pour les raisons suivantes :'; foreach($invalid_messages as $k => $v) { foreach($v as $kk => $vv) { $errors_txt.='<br />'.utf8_encode($vv); } } }
L'objet $input résultat ne contient pas tous les champs, alors que dans le filtre j'indique bien avec '*' de filtrer l'ensemble des valeurs de $_POST.
Par exemple si les champs sont valides et que j'essaie d'y accéder par "$input->nom_du_champ" (sachant que le nom de la règle de validation est le nom du champ du formulaire) je n'obtiens rien.
Dans cet exemple $input->fmNom, $input->getEscaped('fmNom') ou $input->getUnescaped('fmNom') ne me donnent rien.
C'est un peu embêtant parce que je dois par la suite continuer à manipuler des "$this->_request->getParam()" alors que ce serait quand même beaucoup plus simple de n'utiliser que l'objet "$input";
une solution native ?
Merci,
A+ benjamin.
Dernière modification par Delprog (09-06-2009 16:29:01)
Hors ligne
Salut,
Je reviens avec la même question
Avec Zend_Filter_Input je n'accède qu'aux champs passant par un validateur, alors que je passe aussi un filtre sur tous les champs, par la valeur magique "*".
Je suis donc obligé d'accéder aux champs non soumis aux validateurs par un getParam().
Y-a-t'il un moyen d'avoir accès à tous les champs depuis le filter_input ($input->get()) ?
Merci,
A+ benjamin.
Hors ligne
Bonsoir,
pour récupérer tous les champs , la méthode getEscaped() le fait automatiquement si tu ne fournis pas d'argument.
sinon, n'oublie pas de vérifier les champs invalides et les champs manquants
if($inputValidator->hasInvalid() || $inputValidator->hasMissing(){ }
Bon courage
Hors ligne
Salut,
Merci ça fonctionne.
A+ benjamin.
Hors ligne
Bonjour,
Je ré-ouvre le sujet.
Exemple:
$data_in = array( 'broker_provider_id' => $xml->INFOS_AGENCE->IDENTIFIANT, 'editor_id' => $editor_id, 'broker_company_name' => $xml->INFOS_AGENCE->RAISON_SOCIALE, 'broker_commercial_name' => $xml->INFOS_AGENCE->ENSEIGNE_COMMERCIALE, 'broker_address' => $xml->INFOS_AGENCE->ADRESSE, 'broker_additional_address' => $xml->INFOS_AGENCE->COMPLEMENT_ADRESSE, 'broker_zip_code' => $xml->INFOS_AGENCE->CODE_POSTAL, 'broker_town' => $xml->INFOS_AGENCE->VILLE, 'broker_phone' => $xml->INFOS_AGENCE->TEL_PRINCIPAL, 'broker_fax' => $xml->INFOS_AGENCE->FAX, 'broker_cell_phone' => $xml->INFOS_AGENCE->TEL_PORTABLE, 'broker_email' => $xml->INFOS_AGENCE->EMAIL, 'broker_franchise' => $xml->INFOS_AGENCE->FRANCHISE, 'broker_insee' => $xml->INFOS_AGENCE->CODE_INSEE ); $filters = array( '*' => 'StringTrim', 'broker_provider_id' => 'Alnum' ); $validators = array( 'broker_provider_id' => array('NotEmpty', 'Alnum', 'presence' => 'required'), 'broker_company_name' => array('NotEmpty', 'presence' => 'required'), 'broker_commercial_name' => array('NotEmpty', 'presence' => 'required'), 'broker_zip_code' => array('NotEmpty', 'presence' => 'required'), 'broker_town' => array('NotEmpty', 'presence' => 'required') ); $data_verif = new Zend_Filter_Input($filters,$validators); $data_verif->setData($data_in); if ($data_verif->hasInvalid() || $data_verif->hasMissing()) { } else { $data_out = $data_verif->getEscaped(); // <-- Ne me renvoie que les champs présents dans $validators }
Ici le getEscaped() ne me renvoie que les champs présents dans le validateurs et non tous les champs de mon $data_in qui sont sensés tous être filtrés.
C'est pas très pratique et assez embêtant en fait.
Une idée ?
Merci,
A+ benjamin.
Hors ligne
Pour info je fais:
$data_out = array_merge($data_verif->getEscaped(),$data_verif->getUnknown());
Mais la question c'est surtout que j'ai un filtre avec le joker '*', donc est-ce que tous les unknown sont-ils quand même passés par le filtre ? Est-ce parce que le filtre n'a rien modifié dans la valeur ?
Je vais fouiller dans la source de Zend pour voir.
Hors ligne
Pages: 1