THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline


Bonjour,

J'ai dans mon formulaire ceci :

{form_field field="paiement"}
 <div>
     <input type="radio" id="cheque" name="{$name}" value="chèque" class="area required" checked="checked">
     <label>Chèque</label>
 </div>
 <div>
     <input type="radio" id="telepaiement" name="{$name}" value="Télépaiement" class="area required">
     <label>Paiement à distance (appelez-nous)</label>   
 </div>
 <div>
     <input type="radio" id="virement" name="{$name}" value="Virement" class="area required">
     <label>Virement bancaire</label>
 </div>
 {/form_field}

Dans mon formBuilder ceci :

->add('paiement', 'radio', array(
                'constraints' => array(
                    new NotBlank()
                ),
                'label' => $this->translator->trans('Moyen de paiement', [], CarteKdo::DOMAIN_NAME),
                'label_attr' => [
                    'placeholder' => $this->translator->trans('Moyen de paiement', [], CarteKdo::DOMAIN_NAME),
                ]
            ))

et dans le Controller ceci :

$mise_en_forme_body =   "DE LA PART DE :\r\n\t"
                                  . $data['nom_expediteur'] . "\r\n\t"
                                  . "Téléphone : " . $data['telephone'] . "€\r\n\t"
                                  . "Montant : " . $data['montant'] . "\r\n\n"
                                  . "Moyen de paiement : " . $data['paiement'] . "\r\n\n"
                                  . "POUR :\r\n\t"
                                  . $data['nom_destinataire'] . "\r\n\t"
                                  . "Message : " . $data['message'];

Tout cela fonctionne très bien, sauf que je ne récupère pas la valeur de mon groupe radio 'paiement'. Et pour cause, je m'y prends comme un baudet : je récupère au mieux un array la...
J'ai été tenté d'écrire ça, mais ça me renvoit "1" :

 $data['paiement']->$value

En cherchant dans la doc, j'ai pas trouvé d'exemple de radio traitée dans le Controller.

Any help appreciated smile

Last edited by anti-conformiste (10-02-2018 18:12:50)

Offline


Tu peux tout simplement utiliser un type "text" au lieu du type "radio" :

->add('paiement', 'text', array( ...

Ou alors un type 'choice' si tu veux sécuriser la saisie :

->add('paiement', 'choice', array(
                'choices' => array(
                    'chèque' => 'Paiement par chèque',
                    'Télépaiement' => 'Télépaiement',
                    'Virement' => 'Paiement par virement'
                ),
                'data' => 'chèque', // La valeur par défaut
                // Pour avoir un ID unique
                'choice_attr' => function($val, $key, $index) {
                    return ['id' => 'libelle_' . strtolower($key)];
                },
            ))

Et dans ton template, pour rendre le champ :

{form_field field="paiement"}
        {foreach $choices as $choice}
            <div>
                <input type="radio" id="{$choice->attr.id}" name="{$name}" value="{$choice->data}" class="area required" {if $value == $choice->value}checked="checked"{/if}>
                <label>{$choice->label}</label>
        </div>
    {/foreach}
{/form_field}


CQFDev | Sites, boutiques, modules, développement et intégration pour Thelia 1 et 2

Offline


'Faut pas travailler le dimanche :-)

Impeccable, comme d'hab. Ça fonctionne nickel. Merci.

J'avais lu ça dans la doc, mais je n'étais pas capable décrire le bon petit morceau de code dans le formBuilder :

{form_field form=$form field="firstname"}
    {foreach $choices as $choice}
        label : {$choice->label}<br />
        data : {$choice->data}<br />
        value : {$choice->value}
    {/foreach}
{/form_field}

Grâce à ton code, j'ai compris une chose essentielle que je n'avais pas intégrée : si le Controller est appelé à la validation, le fomBuilder lui est appelé avant et parse le code du formulaire, c'est bien ça ?