forms - 在选择类型 Symfony 5 中显示相关实体中的特定字段
问题描述
我正在生成一个表单,它的字段与许多实体相关,例如,如果 Entity Gerance 的相关列与 NatRec 实体中的相关列相同,我只能在实体 NatRec 中显示一些字段。下面的代码可以告诉你事情是如何工作的:
实体 Gerance.php
<?php
// Entity Gerance
namespace App\Entity;
use App\Repository\GeranceRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=GeranceRepository::class)
*/
class Gerance
{
/**
* @ORM\Id
* @ORM\Column(name="CODEGERA")
*/
private $id;
/**
* @ORM\Column(type="string", length=30)
*/
private $LIBEGERA;
/**
* @ORM\Column(type="string", length=1)
*/
private $NUMEGERA;///// related to NatRec
public function getId(): ?string
{
return $this->id;
}
public function getLIBEGERA(): ?string
{
return $this->LIBEGERA;
}
public function setLIBEGERA(string $LIBEGERA): self
{
$this->LIBEGERA = $LIBEGERA;
return $this;
}
public function getNUMEGERA(): ?string
{
return $this->NUMEGERA;
}
public function setNUMEGERA(?string $NUMEGERA): self
{
$this->NUMEGERA = $NUMEGERA;
return $this;
}
}
实体 NatRec.php
<?php
namespace App\Entity;
use App\Repository\NatRecRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=NatRecRepository::class)
*/
class NatRec
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer", name="CODNATRE")
*/
private $id;
/**
* @ORM\Column(type="string", length=150, nullable=true)
*/
private $LIBNATRE;
/**
* @ORM\Column(type="string", length=1)
*/
private $NUMEGERA;
/**
* @ORM\Column(type="string", length=200)
*/
private $LIBELLE;
public function getId(): ?int
{
return $this->id;
}
public function getLIBNATRE(): ?string
{
return $this->LIBNATRE;
}
public function setLIBNATRE(?string $LIBNATRE): self
{
$this->LIBNATRE = $LIBNATRE;
return $this;
}
public function getNUMEGERA(): ?string
{
return $this->NUMEGERA;
}
public function setNUMEGERA(?string $NUMEGERA): self
{
$this->NUMEGERA = $NUMEGERA;
return $this;
}
public function getLIBELLE(): ?string
{
return $this->LIBELLE;
}
public function setLIBELLE(string $LIBELLE): self
{
$this->LIBELLE = $LIBELLE;
return $this;
}
}
并且选择的字段必须是相关的。 选择字段的图像
对于从数据库生成的问题,我无法使实体在学说中相关,所以我只能比较每个实体的字段。
ReclamationType.php:
<?php
namespace App\Form;
use App\Entity\Gerance;
use App\Entity\NatRec;
use App\Entity\Reclamation;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ReclamationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('nom')
->add('adressere')
->add('numetelep')
->add('numerofax')
->add('adresmail')
->add('objreclam')
->add('numegera', EntityType::class, [
'class' => Gerance::class,
'choice_label' => 'LIBEGERA'
])
->add('codnatre', EntityType::class,[
'class' => NatRec::class,
'choice_label' => 'LIBNATRE'
])
->add('prenom')
->add('cin')
->add('datesais')
->add('codeclie')
->add('usersais')
->add('codesect')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Reclamation::class,
]);
}
}
希望有人能帮助我度过这个难关。
解决方案
所以我碰巧找到了一个解决方案,方法是从我需要的实体的存储库中获取我想要显示的所有数据,并通过获取元素 id 并更改那里的值在 JavaScript 中创建条件,因为 Symfony 的表单有点难,因为我在我检查元素之前,我不知道如何获取所选选项的 id。我很高兴我能自己回答这个问题。
推荐阅读
- python - SQLMap 主机似乎不可注入,这是否意味着没有漏洞?
- android - 如何在 RecyclerView 中仅显示 Array List 的前 5 个元素?
- sql - 如何从计数值中获得平均值?
- django - Django - 从表单( ImageField )的模板中显示图像而不保存到模型
- python-3.x - 在 cogs Discord.py 中使用不和谐组件中的按钮时遇到错误
- julia - 使用 or 语句创建子集
- asp.net-mvc - ASP.NET Web 应用程序作为本地用户而不是 Azure AD 登录名加载
- javascript - 将电子商务结帐页面中的值传递到感谢页面以进行 Google Analytics(分析)跟踪
- python - 如何使 Button()s 状态连续?
- pytorch - 为什么在 GAT 模型中 init.xavier_uniform_ 的增益值为 1.414?