J'ai trouvé la solution suivante c'est peut être pas la meilleure
façon de faire ou la plus simple mais sa fonctionne.
Je modifie uniquement le fichier "/lib/form/
doctrine/ProjetMediaForm.class.php" par exemple et donc en ajoutant la
fonction bind je peux changer le validateur en fonction de la valeur
d'un autre champ :
class MmaMediaForm extends BaseMmaMediaForm
{
public function configure()
{
...
}
public function bind(array $taintedValues = null, array
$taintedFiles = array())
{
if($taintedValues['uploadtype'] == 'interne')
{
$this->widgetSchema['fichier'] = new sfWidgetFormInputFile(array
('label' => 'Fichier'));
$this->validatorSchema['fichier'] = new sfValidatorFile(array(
'required' => true,
'path' => sfConfig::get('sf_upload_dir').'/medias',
'mime_types' => 'web_images',
), array(
'required' => 'Vous devez spécifier un fichier',
'mime_types' => 'Le fichier n\'a pas un format valide',
));
}
else
{
$this->widgetSchema['fichier']->setAttribute('size', '80');
$this->validatorSchema['fichier'] = new sfValidatorUrl(array(
'required' => true,
), array(
'required' => 'Vous devez spécifier une URL',
'invalid' => 'L\'URL n\'est pas valide',
));
}
return parent::bind($taintedValues, $taintedFiles);
}
}
Par exemple cette fonction peut être utilisée dans un formulaire de
contact, quand la personne souhaite être contacté par téléphone et non
par mail on enlève le require sur l'email et on l'ajoute au téléphone
exemple :
http://blog.barros.ws/2008/11/05/conditional-validator-in-symfony-another-approach/
On 31 juil, 14:56, eddie <[email protected]> wrote:
> J'ai reçu la réponse suivante par mail je vous en fais part et merci à
> cette personne :
>
> Desactive la validation pour ce champ et surcharge le controleur en
> integrant une validation manuelle.
> J'ai constaté que l'avantage de symfony et qu'il permet de surcharger
> facilement les classes et donc d'éviter de perdre beaucoup trops de
> temps a essayer avec un chausse pied de faire rentrer une spécificité
> dans le cas général...
>
> Ce que j'en comprends c'est qu'il serait plus simple de gérer la
> validation dans le fichier "/apps/backend/modules/medias/actions/
> actions.class.php" pour ce cas de figure plutôt que dans "/lib/form/
> doctrine/ProjetMediaForm.class.php".
> Bon vu que je suis novice en symfony j'vais chercher comment faire.
> Visiblement dans le fichier actions.class.php la fonction executeBatch
> par exemple utilise un validateur sfValidatorDoctrineChoiceMany sa
> peut être une piste.
>
> On 31 juil, 11:16, eddie <[email protected]> wrote:
>
> > Bonjour,
>
> > J'utilise sf1.2 et doctrine, je suis en train de mettre en place un
> > module medias, dans mon formulaire j'ai un champ uploadtype (enum)
> > avec les valeurs 'interne' ou 'externe' et un autre champ fichier.
>
> > En fonction de ce que je choisi avec un petit jQuery je change mon
> > champ d'un input file pour interne à input text pour externe et donc
> > ce que je voudrai c'est lors de la validation en fonction de ce que
> > j'ai choisi pour uploadtype changer le validateur soit sfValidatorFile
> > soit sfValidatorUrl, mais je ne vois pas comment faire.
>
> > J'ai bien vu dans la doc symfony qu'il y a des validateurs globaux
> > pour comparer des mots de passe ou des dates mais je ne vois pas
> > comment les utiliser dans mon cas de
> > figure.http://www.symfony-project.org/forms/1_2/fr/02-Form-Validation#chapte...
>
> > Je vous remercie d'avance de vos réponses !
--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe Groupe "Symfony-fr"
de Google Groupes.
Pour transmettre des messages à ce groupe, envoyez un e-mail à
l'adresse [email protected]
Pour résilier votre abonnement à ce groupe, envoyez un e-mail à
l'adresse [email protected]
Pour afficher d'autres options, visitez ce groupe à l'adresse
http://groups.google.com/group/symfony-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---