Bonjour,

Je voudrais pouvoir obliger l'utilisateur à ne s'inscrire qu'avec une adresse mail "@domaine.be"

{% extends 'base.html.twig' %}

{% block title %}Inscription - Le cercle des saveurs
{% endblock %}

{% block body %}
    {% for flash_error in app.flashes('verify_email_error') %}
        <div class="alert alert-danger" role="alert">{{ flash_error }}</div>
    {% endfor %}

    {{ form_start(registrationForm) }}
    <div class="block-small">
        <h1>Inscription</h1>
        <hr>
        <div class="class row">
            <div class="class col">{{ form_row(registrationForm.firstname) }}</div>

            <div class="class col">{{ form_row(registrationForm.lastname) }}</div>

        </div>

        {{ form_row(registrationForm.email) }}
        {{ form_row(registrationForm.plainPassword, {
            label: 'Password'
        }) }}
        {{ form_row(registrationForm.agreeTerms) }}

        <div class="form-group">
            <a href="{{ path('terms') }}" target="_blank" class="href">Read terms</a>
        </div>
        <div class="pb-5">
            <button type="submit" class="btn btn-block btn-info">Valider</button>
        </div>
    </div>
    {{ form_end(registrationForm) }}
{% endblock %}

Ce que je veux

Donc permettre d'encoder devant le "@domaine.be" ce dernier étant obligatoire et préécrit sans modif possible.
je ne vois pas comment paramétrer mon {{ form_row(registrationForm.email) }}

Merci pour votre retour,

Laurent

10 réponses


Jessy Brs
Réponse acceptée

$builder->add('email', EmailType::class, [
'label' => 'Email (prenom.nom@atheneecomines.be)',
'constraints' => [
new Email([
'message' => 'L\'adresse email n\'est pas valide.',
'mode' => 'html5',
]),
new Length([
'min' => 2,
'max' => 180,
'minMessage' => 'L\'adresse email doit avoir au moins {{ limit }} caractères.',
'maxMessage' => 'L\'adresse email ne peut pas avoir plus de {{ limit }} caractères.',
]),
new Regex([
'pattern' => '/^[a-zA-Z]+.[a-zA-Z]+@atheneecomines.be$/',
'message' => 'L\'adresse email doit être de type : prenom.nom@atheneecomines.be',
]),
],
'attr' => [
'placeholder' => 'Veuillez entrer votre adresse email !',
],
]);

Voilà un exemple, C'est la contrainte Regex qui va te permettre d'afficher le message.
Je t'ai mis la documentation un peu plus haut. Si tu n'as pas compris pourquoi n'hésite pas.

Jessy Brs
Réponse acceptée

Bonjour Laurent,

Tant mieux si cela fonctionne ! Content d'avoir pu t'aider :)

Laurent Delannoy
Auteur
Réponse acceptée

Bonjour Jessy,

Je renconcontre un autre soucis dans mon easyadmin.
L'adresse s'affiche avec le html.

ID
51
Passée le
17 nov. 2023
Utilisateurs
Laurent Delannoy
Adresse de livraison
Laurent Dupont</br>012345678</br>Avenue dupont, 7</br>1000 Bruxelles</br>BE
Total produit
13,00 €
Transporteur
A emporter
Frais de port
0,00 €
State
Paiement validé
Produits achetés
Tarte aux fraises x1

voici mon code dans easyadmin

public function configureFields(string $pageName): iterable
    {
        return [
            IdField::new('id'),
            DateField::new('createdAt', 'Passée le'),
            TextField::new('user.getFullName', 'Utilisateurs'),
            TextEditorField::new('delivery', 'Adresse de livraison')->onlyOnDetail(),
            MoneyField::new('total','Total produit')->setCurrency('EUR'),
            TextField::new('carrierName', 'Transporteur'),
            MoneyField::new('carrierPrice','Frais de port')->setCurrency('EUR'),
            ChoiceField::new('state')->setChoices([
                'Non payée' => 0,
                'Paiement validé' => 1,
                'Commande en cours' => 2,
                'Livraison en cours' => 3,
                'Livrée' => 4
            ]),
            ArrayField::new('orderDetails', 'Produits achetés')->hideOnIndex()
        ];
    }

Peux-tu m'aider à résoudre ce problème ?
merci pour ton retour.

Laurent

{{ form_row(registrationForm.email, {
label: 'Email',
type: 'domaine_be_email',
}) }}

ou

{{ form_start(registrationForm) }}
<div class="block-small">
<h1>Inscription</h1>
<hr>
<div class="class row">
<div class="class col">{{ form_row(registrationForm.firstname) }}</div>
<div class="class col">{{ form_row(registrationForm.lastname) }}</div>
</div>

{{ form_row(registrationForm.email, {
    'attr': {
        'pattern': '.*@domaine\.be$'  // Ajoutez la contrainte de pattern
    }
}) }}

{{ form_row(registrationForm.plainPassword, {
    'label': 'Password'
}) }}

{{ form_row(registrationForm.agreeTerms) }}

<div class="form-group">
    <a href="{{ path('terms') }}" target="_blank" class="href">Read terms</a>
</div>

<div class="pb-5">
    <button type="submit" class="btn btn-block btn-info">Valider</button>
</div>

</div>
{{ form_end(registrationForm) }}

Bonjour Mimiclcl,

Merci, ça fonctionne mais comment faire comprendre à l'utilisateur dans le message d'alerte que l'adresse doit se terminer par @domaine.be.
L'alerte me dit juste veuillez respecter le format requis.

merci pour ton retour,

Laurent

Salut Laurent,
Pour cela, il faut ajouter l'attribut "message" pour définir un texte selon la contrainte.
C'est à dire que je ne conseille pas de mettre le pattern dans le twig mais plutôt dans le formType.

Dans le formType au niveau du add, tu vas ajouter ta constrainte emailType, le patterne et l'attribut message.
https://symfony.com/doc/current/reference/constraints/Email.html ( j'attend un email )
https://symfony.com/doc/current/reference/constraints/Regex.html ( j'attend un pattern spécifique)

Bonjour Jessy Brs,

je suis en 5.0.1,

j'ai fait ce que tu dis mais rien ne change, il empêche l'email, donc ça nickel mais n'affiche pas le message demandé.

->add('email', EmailType::class, [
                'label' => 'Email (prenom.nom@atheneecomines.be)',
                'constraints' => new Length([
                    'min' => 2,
                    'max' => 180
                ]),
                'attr' => [
                    'placeholder' => 'Veuillez entrer votre adresse email !',
                    'pattern' =>
                    '.*@atheneecomines\.be$',
                    'match' => false,
                    'message' => "L'email doit être de type : prenom.nom@atheneecomines.be "
                ]
            ])

et quand je le mets dans le formType j'ai un message d'erreur sur '.*@atheneecomines.be$' : "Warning: Illegal offset type"

Merci pour ton retour,

Laurent

Bonjour Jessy,

Merci, ça fonctionne. J'ai regardé la doc mais je n'avais pas vu comment impémenter la chose.
encore un grand merci.

Laurent

Salut Laurent,

Tu peux

TextEditorField::new('delivery', 'Adresse de livraison')->onlyOnDetail()->setFormattedValue(function ($value) {
// Supprimer les balises HTML
return strip_tags($value); // ou utiliser htmlspecialchars
}),

Je t'avoue ne jamais avoir utiliser easyAdmin. Je te dirais tout de même d'investiguer de pourquoi des balies html ressortent.
Que fais la méthode "onlyOnDetail() etcc sans y passer plus de 20-30 minutes. Sinon tu fais comme je viens de le montrer.

Désolé de ne pas pouvoir aider plus que ça. Peut-être regarder au niveau de ta vue html dans ton formulaire ? Il y a également peut-être un élément qui fait défaut.

Bien à toi.
Jessy.

Salut Jessy,

j'ai essayé ta méthode et ça renvoie le même résultat.
Je galère vraiment sur ce point dans mon form j'utilise {{order.delivery|raw}}

Laurent

Salut Jessy,

J'ai résolu le problème

TextField::new('delivery', 'Adresse de livraison')->onlyOnDetail()->renderAsHtml(),

Encore merci pour ton aide,

Laurent