Bonjour,

je suis sur un projet depuis un mois et tout à coup, on me demande :
c'est possible d'avoir des login identiques... sur tel ou tel site ils le font.

j'ai lu un peu à ce sujet et apparemment c'est quelque chose de demandé sur Symfony depuis longtemps.
Avez-vous des pistes à me fournir , par hasard ?

Merci de votre aide !

2 réponses


clem21s
Réponse acceptée

bonjour Alain Ouakbar Tabba Sardinaluile
ci dessous un petit bout de code juste pour s'inspirer et à adapter à vos besoins;
Vous utilisez l'AttributeOverride de Doctrine.
namespace XXX\UserBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping\AttributeOverrides;
use Doctrine\ORM\Mapping\AttributeOverride;

/**

  • @ORM\Entity
  • @ORM\Table(name="User_User")
  • @ORM\Entity(repositoryClass="UserRepository")
  • @ORM\AttributeOverrides({
  • @ORM\AttributeOverride(name="username", column=@ORM\Column(type="string", name="username", length=255, unique=false, nullable=true)),
  • @ORM\AttributeOverride(name="usernameCanonical", column=@ORM\Column(type="string", name="username_canonical", length=255, unique=false, nullable=true))
  • })
    */
    class User extends BaseUser
    {
    ...
    }

Puis dans votre fichier de configuration

app/config/config.yml

...
fos_user:
profile:
form:
validation_groups: [Default] # Default seulement
registration:
form:
validation_groups: [Default] # Default seulement

Mais il faut faire attention (je pense) quant à la validation de l'adresse email (à valider manuellement).

Bonne continuation à vous!

Alain Ouakbar Tabba Sardinaluile
Auteur
Réponse acceptée

Bonjour Clem21s
Merci beaucoup pour votre message.
Je vais l'étudier.
En attendant, j'ai trouvé une solution en fouillant un peu :
Bonjour merci pour votre message.

En fait j'ai trouvé une solution avec fosuserbundle.

Ca marche très bien.

Il faut surcharger le RegistrationFormType pour supprimer le user name.

        parent::buildForm($builder, $options);
        //supprime le username du register
        $builder
            ->remove('username')
       ;

Il faut créer un nouveau champs par exemple loginmonsite dans l'entité user, mettre ce nouveau champs dans le twig de registration.

            {{ form_label(form.loginmonsite, "Nom d'utilisateur", { 'label_attr': {'class': 'labelConnexion text-center'} }) }}
            {{ form_widget(form.loginmonsite, {'attr': {'class': 'inputConnexion', 'required' : 'true'}}) }}
            {{ form_errors(form.loginmonsite) }} 

à l'enregistrement d'un nouvel user il faut mettre l'email dans le username (setemail dans user.php) : ce qui fait que maintenant colonne username et colonne email sont identiques.

    public function setEmail($email){
        parent::setEmail($email);
        $this->setUsername($email);
    }

ca marche très bien.

il faut bien entendu pour se logguer avec l'email :

https://medrhamnia.wordpress.com/2013/04/06/symfony2fosuserbundle-utiliser-ladresse-mail-pour-se-connecter/

pour ma part, c'était déjà paramétré

Voilà.