web-dev-qa-db-fra.com

définition d'un attribut de marque de réservation avec traduction dans l'entrée de formulaire Symfony2

J'utilise FOSUserBundle pour gérer mes utilisateurs. Afin d’enregistrer un utilisateur, j’ai réutilisé le formulaire du paquet qui répond à mes besoins. Néanmoins, je devais définir certains attributs de mes champs. Cela a été fait facilement par twig comme ceci:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "Username"} }) }}

Maintenant, mon but est de faire de la traduction automatique sur mon espace réservé, alors j'ai proposé ce code:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "{{'security.login.usernameplaceholder'|trans}}"} }) }}

Ce code précédent a généré une entrée dont la valeur d’espace réservé est égale à {{'security.login.usernameplaceholder' | trans}}

Pour résoudre ce problème, j'ai essayé de définir une variable pour cela, mais symfony a généré une erreur !!!

    {% set usernameplaceholder = {{'security.login.usernameplaceholder'|trans}} %}
    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': usernameplaceholder} }) }}

Y a-t-il une proposition pour résoudre ce problème?

Merci,

12
Amine Jallouli

Dans Twig, vous ne devriez pas mettre {{ dans {{ (idem pour {%); Pensez-y comme la balise php.

Ce qui suit devrait fonctionner

{% set usernameplaceholder = 'security.login.usernameplaceholder'|trans %}
{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': usernameplaceholder} }) }}

OR

{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': 'security.login.usernameplaceholder'|trans} }) }}
28
Thomas Potaire

Pour Symfony 3.x, 4.x

Une autre façon d'ajouter des espaces réservés (ou tous les attributs d'ailleurs) est de passer un options-array au formulaire $builder contenant un autre Array attravec des attributs sous forme de paires clé-valeur.

// The parameters are column name, form-type and options-array respectively.
$builder->add('field', null, array(
            'attr' => array(
                 'placeholder' => 'support.contact.titleplaceholder'
             )
        ));
6
Niket Pathak

Vous pouvez également l'ajouter à votre définition de formulaire comme ceci:

    $builder
        ->add('information', 'textarea', array(
            'label' => false,
            'required' => true,
            'constraints' => [
                new NotBlank()
            ],
            'placeholder' => 'support.contact.titleplaceholder',
        ));
0
crmpicco