gpt4 book ai didi

forms - 不清楚的 Symfony 表单错误 "This value is already used"

转载 作者:行者123 更新时间:2023-12-01 07:12:13 25 4
gpt4 key购买 nike

我使用 Symfony 2.7.3 并且我有以下形式(“app_cargo_source”):

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('country', 'choice', [
'choices' => $this->worldManager->getCountriesByRegionIds([1, 2]),
'choice_label' => 'name',
'choice_value' => 'id',
'label' => false,
// *this line is important* see docs for choice type
'choices_as_values' => true
])

// ...
;

// ...
}

该表单在另一个表单(app_cargo)中使用:

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('source', 'app_cargo_source')
// ...
;

// ...
}

第一种形式的“choices”字段是WorldCountry对象的数组,这些对象是根据地区id从数据库中选择的。这是来自 Profiler 的数组图片:

enter image description here

WorldCountry 和 WorldRegion 具有单向的 ManyToOne 关系。

问题是,当我在国家字段中选择国家并提交表单时,我收到国家字段的以下错误:

enter image description here

为什么会这样,为什么 Symfony 会尝试为区域分配一个值?

附言如果需要更多信息,请告诉我。

最佳答案

没错!看来问题出在我的 WorldCountry 实体中区域字段的唯一性。我的 WorldRegion 实体如下:

/**
* WorldRegion
*
* @ORM\Table(name="world_region")
* @ORM\Entity(repositoryClass="AppBundle\Repository\WorldRegionRepository")
*
* @UniqueEntity(fields={"code"}, message="Region code must be unique")
*/
class WorldRegion
{
/**
* @var integer
*
* @ORM\Column(name="region_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
* @Assert\NotBlank()
*
* @ORM\Column(name="region_code", type="string", length=5,
* unique = true, nullable=false)
*/
protected $code;

// ...
}

和世界国家:

/**
* WorldCountry
*
* @ORM\Table(name="world_country")
* @ORM\Entity(repositoryClass="AppBundle\Repository\WorldCountryRepository")
*
* @UniqueEntity(fields={"iso2"})
* @UniqueEntity(fields={"iso3"})
* @UniqueEntity(fields={"region"}) // This line should be removed!
*/
class WorldCountry
{
/**
* @var integer
*
* @ORM\Column(name="country_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var WorldRegion
*
* @ORM\ManyToOne(targetEntity="WorldRegion",
* cascade={"all"}
* )
* @ORM\JoinColumn(name="region_id", referencedColumnName="region_id")
*/
protected $region;

// ...
}

正如所见,WorldCountry 对区域字段具有唯一约束。在这种情况下,这是逻辑错误。因为 ManyToOne 声明在 WorldCountry 的数据库表中,国家是唯一的,但地区不是。但是我使用 @UniqueEntity 声明区域也应该是唯一的。因此,注释 @UniqueEntity(fields={"region"}) 应该从 WorldCountry 实体中删除。

附言如果我可以改进我的答案,请告诉我。

关于forms - 不清楚的 Symfony 表单错误 "This value is already used",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35336633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com