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