php - SYMFONY 5 - 表单中的查询生成器
问题描述
我在表单中恢复广告系列名称时遇到了一点问题。我的表单所做的是显示一个工作正常的用户组和组名,但活动名称的下拉列表为空,我一直在尝试使用 query_builder 检索活动名称列表但没有成功.. 这是我的控制器代码:
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()));
}
}
这是我的表单代码:
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()
]);
}
}
这是我的 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;
}
}
这是我的 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();
}
}
这是我的屏幕截图: 在此处输入图像描述
解决方案
在语句$form = $this->createForm(VicidialUserGroupsAdminType::class, $groupe , array('idcampagnes' => $idcampagnes));
中,表单的选项数组有 key 'idcampagnes'
。然而,您的表单类在其 options 数组中需要一个键'campagnesid'
。选项的数组键应该相同。为了保持一致性,您可能应该将表单调用选项数组更改为array('campagnesid' => $idcampagnes))
,但这取决于您。
推荐阅读
- c# - 对齐大文本文件
- wso2 - WSO2 EI:通过 REST API 调用时使用提供 INCOMPATIBLE_PARAMETERS_ERROR 的数据服务
- sublimetext3 - Sublime Text 侧边栏可以为其树形视图提供线条指南吗?
- oauth - 在 OAUTH/OpenID-Connect 之前询问用户名或唯一身份
- elasticsearch - ElasticSearch 搜索查询不区分大小写
- python - 使用值列表作为条件屏蔽 DataFrame
- sql - ORACLE 如果任何字段更改,则添加新记录
- mesos - 有没有办法在 Apache mesos master quorum 中强制重新选举?
- tensorflow - 使用 toco(tensorflow) 将 .Pb 过滤器转换为 tflite 时出错
- amazon-web-services - 我可以在单个 AWS Beanstalk 实例/集群上为 Docker 映像运行多个应用程序或容器吗?