Salut , J'ai petit soucis sur un projet , je veux gerer plusieurs utilisateurs (administrateur , client , entreprise) et je veux utiliser le FOS user mais ce dernier gere pas les multi users , dans ce cas est ce que je doit implementer le code à zero ou bien il y a des astuces et merci

5 réponses


Salut, il existe un bundle qui étend FOSUserbundle -> PUGXMultiUserBundle

Il a ajoute la gestion multi utilisateurs. Par contre, pourquoi tu peux pas utiliser la même classe User et utiliser les "Group" de FOSuser ?

Suffit de modifier leurs roles?

Ouais tu peut attribuer un role a chaque groupe, et donc séparer tes différents utilisateurs. Par contre sa peu nécessiter des changement dans les controlleurs de FOS et dans les formulaires. Sa doit être documenté dans la doc de FOS.
Après le PUGX bundle peut être intéressant si tu veux avoir différentes tables pour tes utilisateurs.
Sa dépend surtout si ta besoin d'avoir des classes différentes ou non.

adelos-7
Auteur

Salut , J'ai déja essayé d'installer le bundle PUGX , mais j'ai recontré des problemes au niveau de la configuration surtout sur la partie config.yml , le message d'erreur est : "UserDiscriminator, error getting form type : "Utilisateurs\UtilisateursBundle\Form\Type\ClientsForm\RegistrationClientsFormType" not found"
et je suis entrain de chercher le bug mais pas de resultat jusqu'a maintenant , je peux vous montrer la configuration si vous avez pas de problemes et merci d'avance

// Probleme résolu merci pour votre aide

Bonjour,

As-tu regardé dans les sources du bundle?
Dans la classe PUGXMultiUserBundle/Controller/RegistrationManager.php

    public function __construct(UserDiscriminator $userDiscriminator,
                                ContainerInterface $container, 
                                RegistrationController $controller,
                                FormFactory $formFactory)
    {
        $this->userDiscriminator = $userDiscriminator;
        $this->container = $container;
        $this->controller = $controller;
        $this->formFactory = $formFactory;
    }

    /**
     * 
     * @param string $class
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function register($class)
    {
        $this->userDiscriminator->setClass($class);

        $this->controller->setContainer($this->container);
        $result = $this->controller->registerAction($this->container->get('request'));        
        if ($result instanceof RedirectResponse) {
            return $result;
        }

        $template = $this->userDiscriminator->getTemplate('registration');
        if (is_null($template)) {
            $engine = $this->container->getParameter('fos_user.template.engine');
            $template = 'FOSUserBundle:Registration:register.html.'.$engine;
        }

        $form = $this->formFactory->createForm();      
        return $this->container->get('templating')->renderResponse($template, array(
            'form' => $form->createView(),
        ));
    }

On peut voir que l'action register te crée le form depuis $formFactory qui est une instance de classe
PUGXMultiUserBundle/Form/FormFactory.php

Ou la methode createForm est utilisé . Je pense que tu as un problème de type pour UserDiscriminator.

Car la méthode construc de FormFactory attend un UserDiscriminator

 /**
     * 
     * @param \PUGX\MultiUserBundle\Model\UserDiscriminator $userDiscriminator
     * @param string $type registration|profile
     */
    public function __construct(UserDiscriminator $userDiscriminator, FormFactoryInterface $formFactory, $type) 
    {
        $this->userDiscriminator = $userDiscriminator;
        $this->formFactory = $formFactory;
        $this->type = $type;
    }

Voila j'espère avoir pu t'aider

A +