Я использую 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.