Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twig 具有额外列的细枝关系_Twig_Symfony - Fatal编程技术网

Twig 具有额外列的细枝关系

Twig 具有额外列的细枝关系,twig,symfony,Twig,Symfony,我有一个问题,不知道解决它的最佳做法 我想为我的核心数据创建一个表单。核心数据都是可版本的。 我用GUID解决了它,以了解版本的一致性 现在我有两个可版本化的实体AgeClass和HighscoreList,它们可以有多对多关系。关系也必须是可版本的,所以我创建了一个ReferenceEntityRefAgeClassHighscoreList。现在我有了与额外列的关系 有效期为[和] 有效的 但是现在我不知道我应该如何建立我的形式。 编辑AgeClass时,所有当前(有效)HighscoreL

我有一个问题,不知道解决它的最佳做法

我想为我的核心数据创建一个表单。核心数据都是可版本的。 我用GUID解决了它,以了解版本的一致性

现在我有两个可版本化的实体
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提供的默认块添加新块。我的建议是使用表单名称为特定表单创建新的小部件和行。你可以找到很多关于我提到的内容的文档,并且需要每个文档的一小部分来满足你的要求

希望这些线索对你有所帮助