Bonjour, c'est encore moi.

Je cherche à remplir un champ de formulaire avec le username d'un de mes objets.

Le problème est que je peux modifier ce champ pré-rempli.

Comment rendre sa modif impossible ?

Voici ce que j'ai dans le controller pour l'appel du FormType

         $contact = new Contact();
        if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
            $user = $this->getUser();
            $contact->setContactname($user->getUsername());
        }

        $form = $this->createForm(ContactType::class, $contact);

Par avance merci pour votre aide.
Nans

3 réponses


skp
Réponse acceptée

Bonsoir, si ton champ n'est jamais modifiable alors suffit de ne pas le proposer. Mais ton code me laisser penser qu'une personne non authentifié peut modifier ce champ. Dans ce cas :

  • Dans ta vue, l'input concerné passe en readonly quand l'utilisateur est authentifié
  • Dans le controller, après la validation de ton formulaire. Si l'utilisateur est authentifié, tu redéfinies "contactname" pour qu'il correspond à ta valeur
nans
Auteur

Encore une fois merci skp !
Je ne sais pas ce qu'est read_only mais ta proposition m'a fait faire ça dans ma vue (en enlevant le champ correspondant du ContactType :

{% block body %}
    <h1>Contacter le développeur</h1>
 <br>(* Champs obligatoires)
<form action="{{ path("Contact") }}" method="POST"> 
            {% if not is_granted('IS_AUTHENTICATED_FULLY') %}
            Entrer votre nom : <input type="text" name="contactname">
            {% endif %}
            {% if is_granted('IS_AUTHENTICATED_FULLY') %}
            Votre nom : {{ app.user.username }}
            {% endif %}

        {{ form_start(form) }}
        {{ form_widget(form) }}
        {{ form_end(form) }}

</form>   
C'est certainement "dégueulasse" et à optimiser mais je vais m'en contenter, je suis un peu dans l'urgence.

{% endblock %}
nans
Auteur

Il y a ça qui marche du tonnerre aussi !

{% do form.contactname.setRendered %}