Перевод объекта, расширяющего объект abtract, с помощью пакета KnpLabs / DoctrineBehaviors - PullRequest
0 голосов
/ 05 ноября 2019

Я использую knplabs/doctrine-behaviors комплект для перевода некоторых полей сущностей. Это хорошо работает для большинства моих случаев, и пакет a2lix/translation-form-bundle отлично подходит для генерации форм. Я только что столкнулся с конкретной проблемой, на которую я надеялся, что у кого-то еще может быть ответ: мне нужно перевести поле из класса, который расширяет абстрактный класс.

Итак, у меня есть Step abstract class:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;

/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorMap( {"stephardware" = "StepHardware", "stepquestion" = "StepQuestion"} )
 */
abstract class Step
{
    use ORMBehaviors\Translatable\Translatable;
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    protected $id;

    // getters and setters
}

Расширяется классом StepHardware:

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\StepHardwareRepository")
 */
class StepHardware extends Step
{
    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Product", inversedBy="stepHardwares")
     */
    private $Products;

    /**
     * @ORM\Column(type="boolean")
     */
    private $Optional;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Step", cascade={"persist", "remove"})
     */
    private $NextStep;

    /**
     * @ORM\Column(type="boolean", nullable=true)
     */
    private $Multichoice;

    // Getters and setters

}

И переводится другим абстрактным классом:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;

/**
 * @ORM\Entity
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorMap( {"stephardware" = "StepHardware", "stepquestion" = "StepQuestion"} )
 */
abstract class StepTranslation
{
    use ORMBehaviors\Translatable\Translation;

    /**
     * @ORM\Column(type="text")
     */
    protected $Question;

    // getters and setters
}

Проблема в том, что я, когда я отправляю свою форму,Я получаю сообщение о том, что пытаюсь создать экземпляр абстрактного класса ... как я могу перевести класс, основанный на абстрактном классе?

Я мог бы настроить атрибут Question в классе StepHardware,но это не было бы чистым кодированием, поскольку у меня есть другие классы, основанные на абстрактном классе Step.

...