[英]SYMFONY 5 - Query Builder in a form
I have a little problem recovering the Campaigns name in my form.我在恢复表单中的广告系列名称时遇到了一点问题。 What my form does is display a user group and group name which works fine but it the drop-down list of campaigns name is empty, I have been trying to retrieve the list of campaigns name using query_builder but without success.. here is my controller code:我的表单所做的是显示一个工作正常的用户组和组名,但是活动名称的下拉列表为空,我一直在尝试使用 query_builder 检索活动名称列表但没有成功.. 这是我的 controller代码:
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use App\Entity\VicidialUserGroups;
use App\Form\VicidialUserGroupsType;
use App\Form\CentreApplGrpsType;
use App\Form\VicidialUserGroupsAdminType;
class SomeController {
public function newbyadminAction(Request $request ): Response {
$session = $request->getSession();
if ($session->get('niveau') !== 9) {
throw $this->createAccessDeniedException();
}
$groupe = new VicidialUserGroups();
$centreapplgrp = new CentreApplGrps();
$em = $this->getDoctrine()->getManager();
$idgroupes = $em->getRepository(CentreApplGrps::class)->groupesidparappel($session->get('appel_id'));
$idcampagnes = $em->getRepository(VicidialUserGroups::class)->campagnesidparappel($idgroupes);
$form = $this->createForm(VicidialUserGroupsAdminType::class, $groupe , array('idcampagnes' => $idcampagnes));
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$centreapplgrp->setUserGroup($session->get('call_triptyque') . '_' . $form->get('userGroup')->getData());
$centreapplgrp->setCallcenterId($session->get('appel_id'));
$groupe->setUserGroup($session->get('call_triptyque') . '_' . $groupe->getUserGroup());
$groupe->setGroupName($session->get('call_triptyque') . '_' . $groupe->getGroupName());
$em->persist($groupe);
$em->persist($centreapplgrp);
$em->flush();
}
return $this->render('groupe/nouveau_groupe_par_admin.html.twig', array('form' => $form->createView()));
}
}
here is my form code:这是我的表单代码:
namespace App\Form;
use App\Entity\VicidialUserGroups;
use App\Entity\VicidialCampaigns;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use App\Repository\VicidialCampaignsRepository;
class VicidialUserGroupsAdminType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options {
$builder
->add('userGroup', TextType::class, array(
'label' => 'Id Groupe',
'attr' => array('class' => 'form-control')
))
->add('groupName',TextType::class, array(
'label' => 'Nom du groupe',
'attr' => array('class' => 'form-control')
))
->add('allowedCampaigns', EntityType::class, array(
'class' => VicidialCampaigns::class,
'label' => 'Campagne',
'choice_label' => 'campaignName',
'placeholder' => 'Les campagnes',
'attr' => array('class' => 'form-control'),
'query_builder' => function (VicidialCampaignsRepository $er) use ($options) {
return $er->formcampagnesparappel($options['campagnesid']);
}
));
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'data_class' => VicidialUserGroups::class,
'campagnesid' => array()
]);
}
}
here is my VicidialCampaignsRepository:这是我的 VicidialCampaignsRepository:
namespace App\Repository;
use App\Entity\VicidialCampaigns;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method VicidialCampaigns|null find($id, $lockMode = null, $lockVersion = null)
* @method VicidialCampaigns|null findOneBy(array $criteria, array $orderBy = null)
* @method VicidialCampaigns[] findAll()
* @method VicidialCampaigns[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class VicidialCampaignsRepository extends ServiceEntityRepository {
public function __construct(ManagerRegistry $registry) {
parent::__construct($registry, VicidialCampaigns::class);
}
public function formcampagnesparappel($cc) {
$qb = $this->createQueryBuilder('c')
->select('c')
->where('c.campaignId IN (:cc)')
->setParameter('cc', $cc);
return $qb;
}
}
here is my CentreApplGrpsRepository code:这是我的 CentreApplGrpsRepository 代码:
namespace App\Repository;
use App\Entity\CentreApplGrps;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @method CentreApplGrps|null find($id, $lockMode = null, $lockVersion = null)
* @method CentreApplGrps|null findOneBy(array $criteria, array $orderBy = null)
* @method CentreApplGrps[] findAll()
* @method CentreApplGrps[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class CentreApplGrpsRepository extends ServiceEntityRepository {
public function __construct(ManagerRegistry $registry) {
parent::__construct($registry, CentreApplGrps::class);
}
public function groupesidparappel ($centreappl) {
$qb = $this->createQueryBuilder('g')
->select('g.userGroup')
->where('g.centreappel = :centreappl')
->setParameter('centreappl', $centreappl);
return $qb->getQuery()->getResult();
}
}
here is my screenshot: enter image description here这是我的屏幕截图:在此处输入图像描述
In the statement $form = $this->createForm(VicidialUserGroupsAdminType::class, $groupe, array('idcampagnes' => $idcampagnes));
在语句中$form = $this->createForm(VicidialUserGroupsAdminType::class, $groupe, array('idcampagnes' => $idcampagnes));
the form's option array has the key 'idcampagnes'
.表单的选项数组有键'idcampagnes'
。 Yet your form class expects a key in its options array of 'campagnesid'
.然而,您的表格 class 需要在其选项数组'campagnesid'
中有一个键。 The option's array keys should be identical.选项的数组键应该相同。 For consistency you should probably change the form call options array to array('campagnesid' => $idcampagnes))
, but that's up to you.为了保持一致性,您可能应该将表单调用选项数组更改为array('campagnesid' => $idcampagnes))
,但这取决于您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.