J'essaie de récupérer depuis un champs EntityType seulement les utilisateurs ayant un rôle spécifique.
Je me suis tourner vers le query builder mais je ne comprends pas vraiment comment l'utiliser j'ai beaucoup de difficulté a l'emploi du query builder et je me demande si c'est la meilleur façon de faire pour filtrer seulement les utilisateurs ayant le rôle voulu
Mon controlleur :
<?php
namespace App\Controller\Admin\Projet;
use App\Entity\Client\Projet\Evenement;
use App\Form\Admin\Projet\EvenementType;
use App\Repository\Client\Projet\EvenementRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/admin/projet/evenement")
*/
class EvenementController extends AbstractController
{
/**
* @Route("/modifier/{id}", name="admin_projet_evenement_edit", methods="GET|POST")
*/
public function edit(Request $request, Evenement $evenement): Response
{
$form = $this->createForm(EvenementType::class, $evenement);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
$this->addFlash(
'notice',
'Le projet a correctement été modifier.'
);
return $this->redirectToRoute('admin_projet_evenement_edit', ['id' => $evenement->getId()]);
}
return $this->render('admin/projet/evenement/edit.html.twig', [
'evenement' => $evenement,
'form' => $form->createView(),
]);
}
}
Mon FormType :
<?php
namespace App\Form\Admin\Projet;
use App\Entity\Intervenant\Profil\Profil;
use App\Entity\Client\Projet\Evenement;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
class EvenementType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nom')
->add('dateDepart', DateTimeType::class, array(
'widget' => 'single_text',
))
->add('dateFin', DateTimeType::class, array(
'widget' => 'single_text',
))
->add('lieu')
->add('gestionnaires', EntityType::class, array(
'class' => Profil::class,
'expanded' => true,
'multiple' => true,
'choice_label' => function(Profil $profil) {
return $profil->getFirstname() . ' ' . $profil->getLastname(); }
))
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Evenement::class,
]);
}
}
Le champs "gestionnaires" concernent le champs auquel j'aimerais filtrer la récupération d'utilisateur, afin de n'afficher que les utilisateurs ayant le rôle souhaiter
'query_builder' => function (UtilisateurRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.roles', 'ASC')
->andWhere('u.roles IN (:role)')
->setParameter('role', 'ROLE_GESTIONNAIRE');
},
Il manquer simplement des parenthèse après IN, là je me retrouve encore avec le soucis de taleur, aucune erreur, mais cela ne liste pas non plus les utilisateurs ayant le rôle gestionnaire, je ne vois aucun utilisateur
Voilà ma requete pour obtenir les utilisateurs qui ont le role par exemple ROLE_GESTIONNAIRE, la requete prend en variable $role instantiée avec cette chaîne.
Les rôles sont archivés dans l'entité user sous forme d'array.
La requête renvoie les utulisateurs qui ont ce rôle, ce qui est différend des utilisateurs autorisés. EN effet, si ROLE_ADMIN est le hiérarchique de ROLE_GESTIONNAIRE alors un user qui a dans son entité un array contenant ROLE_ADMIN est autorisé à ROLE_GESTIONNAIRE mais ne sera pas dans la requête présentée ci-dessous.
public function findByRole($role)//par exemple $role ="ROLE_GESTIONNAIRE"
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u')
->from($this->_entityName, 'u')
->where('u.roles LIKE :roles')
->andwhere('u.enabled = :enabled')
->setParameter('roles', '%"'.$role.'"%')
->setParameter('enabled', true)
;
return $qb->getQuery()->getResult();
}
Pour le fun, la requête ne renvoie que les users dont le compte est activé (enabled).
Merci à vous deux d'avoir pris le temps de m'aider, en fait il fallait tout simplement que je procèdent de la manière que Carrédas a exposer en utilisant LIKE a la place de IN
'query_builder' => function (UtilisateurRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.roles', 'ASC')
->where('u.roles LIKE :role')
->setParameter('role', '%"'.'ROLE_GESTIONNAIRE'.'"%');
},
Là cela fonctionne parfaitement, je vous remercie ça me sauve j'ai perdu énormément de temps sur ça et j'en aurais perdu beaucoup plus sans votre aide.
Merci.
[Symfony 4] EntityType récupérer user par rôle
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Site les mathématiques amusantes pour vous détendre