Twig 具有额外列的细枝关系
我有一个问题,不知道解决它的最佳做法 我想为我的核心数据创建一个表单。核心数据都是可版本的。 我用GUID解决了它,以了解版本的一致性 现在我有两个可版本化的实体Twig 具有额外列的细枝关系,twig,symfony,Twig,Symfony,我有一个问题,不知道解决它的最佳做法 我想为我的核心数据创建一个表单。核心数据都是可版本的。 我用GUID解决了它,以了解版本的一致性 现在我有两个可版本化的实体AgeClass和HighscoreList,它们可以有多对多关系。关系也必须是可版本的,所以我创建了一个ReferenceEntityRefAgeClassHighscoreList。现在我有了与额外列的关系 有效期为[和] 有效的 但是现在我不知道我应该如何建立我的形式。 编辑AgeClass时,所有当前(有效)HighscoreL
AgeClass
和HighscoreList
,它们可以有多对多关系。关系也必须是可版本的,所以我创建了一个ReferenceEntity
RefAgeClassHighscoreList
。现在我有了与额外列的关系
有效期为[和]有效的 但是现在我不知道我应该如何建立我的形式。 编辑
AgeClass
时,所有当前(有效)HighscoreList
项目都应显示为复选框。
但是当我构建编辑表单时,这些值必须与RefAgeClassHighscoreList
实体绑定
我希望你能理解我的问题
年龄组别:
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\DSV\Core\BaseDSVCoreDataRepository")
* */
class AgeClass extends BaseDSVCoreData
{
/**
* @ORM\Column(type="integer")
* @NotBlank()
* @var int
*/
protected $minAge;
/**
* @ORM\Column(type="integer")
* @NotBlank()
* @var int
*/
protected $maxAge;
/**
* @ORM\OneToMany(targetEntity="RefAgeClassHighscoreList", mappedBy="ageClass", cascade={"persist"})
* @var PersistentCollection
*/
private $ageClassHighscoreLists;
/**
* AgeClass constructor.
*/
function __construct()
{
$this->setGuid(GuidHelper::generateGuid());
$this->setValidFrom(new \DateTime());
}
/**
* @return int
*/
public function getMinAge()
{
return $this->minAge;
}
/**
* @param int $minAge
* @return AgeClass
*/
public function setMinAge($minAge)
{
$this->minAge = $minAge;
return $this;
}
/**
* @return int
*/
public function getMaxAge()
{
return $this->maxAge;
}
/**
* @param int $maxAge
* @return AgeClass
*/
public function setMaxAge($maxAge)
{
$this->maxAge = $maxAge;
return $this;
}
/**
* @return array
*/
public function getAgeClassHighscoreLists()
{
if($this->ageClassHighscoreLists == null)
return array();
return $this->ageClassHighscoreLists->toArray();
}
/**
* @param PersistentCollection $valuationClasses
* @return AgeClass
*/
public function seAgeClassHighscoreLists($valuationClasses)
{
$this->ageClassHighscoreLists = $valuationClasses;
return $this;
}
/**
* @return HighscoreList[]
*/
public function getHighscoreLists()
{
return array_map(
function ($ageClassHighscoreList) {
/** @var RefAgeClassHighscoreList $ageClassHighscoreList */
return $ageClassHighscoreList->getHighscoreList();
},
$this->getAgeClassHighscoreLists()
);
}
/**
* @param RefAgeClassHighscoreList $ageClassHighscoreList
* @return $this
*/
public function addAgeClassHighscoreList($ageClassHighscoreList)
{
if (!$this->ageClassHighscoreLists->contains($ageClassHighscoreList)) {
$this->ageClassHighscoreLists->add($ageClassHighscoreList);
$ageClassHighscoreList->setAgeClass($this);
}
return $this;
}
}
高分榜
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\DSV\Core\BaseDSVCoreDataRepository")
* */
class HighscoreList extends BaseDSVCoreData
{
/**
* @ORM\OneToMany(targetEntity="RefAgeClassHighscoreList", mappedBy="highscoreList", cascade={"persist"})
* @var PersistentCollection
*/
private $ageClassHighscoreLists;
function __construct()
{
$this->setGuid(GuidHelper::generateGuid());
}
/**
* @return PersistentCollection
*/
public function getAgeClassReferences()
{
return $this->ageClassHighscoreLists;
}
/**
* @param PersistentCollection $valuationClasses
* @return AgeClass
*/
public function setAgeClassReferences($valuationClasses)
{
$this->ageClassReferences = $valuationClasses;
return $this;
}
/**
* @return AgeClass[]
*/
public function getAgeClasses()
{
return array_map(
function ($ageClassHighscoreList) {
/** @var RefAgeClassHighscoreList $ageClassHighscoreList */
return $ageClassHighscoreList->getAgeClass();
},
$this->ageClassHighscoreLists->toArray()
);
}
/**
* @param RefAgeClassHighscoreList $ageClassHighscoreList
* @return HighscoreList
*/
public function addAgeClassReference($ageClassHighscoreList)
{
if (!$this->ageClassHighscoreLists->contains($ageClassHighscoreList)) {
$this->ageClassHighscoreLists->add($ageClassHighscoreList);
$ageClassHighscoreList->setHighscoreList($this);
}
return $this;
}
}
/**
* @ORM\Entity()
* */
class RefAgeClassHighscoreList implements IVersionable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\Column(type="datetime")
*/
protected $validFrom;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
protected $validTo;
/**
* @ORM\ManyToOne(targetEntity="AgeClass", inversedBy="highscoreListReferences")
* @ORM\JoinColumn(name="ageclass_id", referencedColumnName="id", nullable=FALSE)
*/
protected $ageClass;
/**
* @ORM\ManyToOne(targetEntity="highscoreList", inversedBy="ageClassReferences")
* @ORM\JoinColumn(name="highscorelist_id", referencedColumnName="id", nullable=FALSE)
*/
protected $highscoreList;
protected $hasChanges = false;
/**
* @see IVersionable
*/
public function getId()
{
return $this->id;
}
/**
* @see IVersionable
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* @see IVersionable
*/
public function getGuid()
{
return null;
}
/**
* @see IVersionable
*/
public function setGuid($guid)
{
return $this;
}
/**
* @see IVersionable
*/
public function getValidFrom()
{
return $this->validFrom;
}
/**
* @see IVersionable
*/
public function setValidFrom($validFrom)
{
$this->validFrom = $validFrom;
return $this;
}
/**
* @see IVersionable
*/
public function getValidTo()
{
return $this->validTo;
}
/**
* @see IVersionable
*/
public function setValidTo($validTo)
{
$this->validTo = $validTo;
return $this;
}
/**
* @see IVersionable
*/
public function isValid()
{
return ($this->validTo == null);
}
/**
* @see IVersionable
*/
public function createNewVersion()
{
$newVersion = clone $this;
$newVersion->setValidFrom(new \DateTime());
return $newVersion;
}
/**
* @see IVersionable
*/
public function hasChanges()
{
return $this->hasChanges;
}
/**
* @return AgeClass
*/
public function getAgeClass()
{
return $this->ageClass;
}
/**
* @param AgeClass $ageClass
* @return RefAgeClassHighscoreList
*/
public function setAgeClass($ageClass)
{
$this->ageClass = $ageClass;
return $this;
}
/**
* @return HighscoreList
*/
public function getHighscoreList()
{
return $this->highscoreList;
}
/**
* @param HighscoreList $highscoreList
* @return RefAgeClassHighscoreList
*/
public function setHighscoreList($highscoreList)
{
$this->gighscoreList = $highscoreList;
return $this;
}
}
}
重构类高分列表
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\DSV\Core\BaseDSVCoreDataRepository")
* */
class HighscoreList extends BaseDSVCoreData
{
/**
* @ORM\OneToMany(targetEntity="RefAgeClassHighscoreList", mappedBy="highscoreList", cascade={"persist"})
* @var PersistentCollection
*/
private $ageClassHighscoreLists;
function __construct()
{
$this->setGuid(GuidHelper::generateGuid());
}
/**
* @return PersistentCollection
*/
public function getAgeClassReferences()
{
return $this->ageClassHighscoreLists;
}
/**
* @param PersistentCollection $valuationClasses
* @return AgeClass
*/
public function setAgeClassReferences($valuationClasses)
{
$this->ageClassReferences = $valuationClasses;
return $this;
}
/**
* @return AgeClass[]
*/
public function getAgeClasses()
{
return array_map(
function ($ageClassHighscoreList) {
/** @var RefAgeClassHighscoreList $ageClassHighscoreList */
return $ageClassHighscoreList->getAgeClass();
},
$this->ageClassHighscoreLists->toArray()
);
}
/**
* @param RefAgeClassHighscoreList $ageClassHighscoreList
* @return HighscoreList
*/
public function addAgeClassReference($ageClassHighscoreList)
{
if (!$this->ageClassHighscoreLists->contains($ageClassHighscoreList)) {
$this->ageClassHighscoreLists->add($ageClassHighscoreList);
$ageClassHighscoreList->setHighscoreList($this);
}
return $this;
}
}
/**
* @ORM\Entity()
* */
class RefAgeClassHighscoreList implements IVersionable
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\Column(type="datetime")
*/
protected $validFrom;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
protected $validTo;
/**
* @ORM\ManyToOne(targetEntity="AgeClass", inversedBy="highscoreListReferences")
* @ORM\JoinColumn(name="ageclass_id", referencedColumnName="id", nullable=FALSE)
*/
protected $ageClass;
/**
* @ORM\ManyToOne(targetEntity="highscoreList", inversedBy="ageClassReferences")
* @ORM\JoinColumn(name="highscorelist_id", referencedColumnName="id", nullable=FALSE)
*/
protected $highscoreList;
protected $hasChanges = false;
/**
* @see IVersionable
*/
public function getId()
{
return $this->id;
}
/**
* @see IVersionable
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* @see IVersionable
*/
public function getGuid()
{
return null;
}
/**
* @see IVersionable
*/
public function setGuid($guid)
{
return $this;
}
/**
* @see IVersionable
*/
public function getValidFrom()
{
return $this->validFrom;
}
/**
* @see IVersionable
*/
public function setValidFrom($validFrom)
{
$this->validFrom = $validFrom;
return $this;
}
/**
* @see IVersionable
*/
public function getValidTo()
{
return $this->validTo;
}
/**
* @see IVersionable
*/
public function setValidTo($validTo)
{
$this->validTo = $validTo;
return $this;
}
/**
* @see IVersionable
*/
public function isValid()
{
return ($this->validTo == null);
}
/**
* @see IVersionable
*/
public function createNewVersion()
{
$newVersion = clone $this;
$newVersion->setValidFrom(new \DateTime());
return $newVersion;
}
/**
* @see IVersionable
*/
public function hasChanges()
{
return $this->hasChanges;
}
/**
* @return AgeClass
*/
public function getAgeClass()
{
return $this->ageClass;
}
/**
* @param AgeClass $ageClass
* @return RefAgeClassHighscoreList
*/
public function setAgeClass($ageClass)
{
$this->ageClass = $ageClass;
return $this;
}
/**
* @return HighscoreList
*/
public function getHighscoreList()
{
return $this->highscoreList;
}
/**
* @param HighscoreList $highscoreList
* @return RefAgeClassHighscoreList
*/
public function setHighscoreList($highscoreList)
{
$this->gighscoreList = $highscoreList;
return $this;
}
}
嗯,你有一个非常重复和乏味的问题。您可以使用AgeClass执行一个操作,并为RefAgeClassHighscoreList类型嵌入一个表单。在这种嵌入形式中,您可以拥有HighscoreList类型的属性,问题是您需要的默认呈现组件是HighscoreList的多选列表,您可以看到它将属性multiple=true设置为HighscoreList的属性 要将该列表转换为复选框列表,您需要创建一个自定义块,以扩展或向symfony提供的默认块添加新块。我的建议是使用表单名称为特定表单创建新的小部件和行。你可以找到很多关于我提到的内容的文档,并且需要每个文档的一小部分来满足你的要求 希望这些线索对你有所帮助