我正在使用带有 Doctrine 的 Symfony 2.2 构建一个表单生成器。
我的实体如下:
- 形式
- 小部件文本
- 小部件选择
我所有的小部件都扩展了以下类:
/**
* Widget
*
* @ORM\MappedSuperclass
*/
abstract class Widget
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Form", inversedBy="widgets")
*/
private $form;
/**
* @var string
*
* @ORM\Column(name="type", type="string", length=255)
*/
private $type;
/**
* @var integer
*
* @ORM\OneToOne(targetEntity="Question")
*/
private $question;
// getters and setters
}
我的表单实体如下所示:
/**
* Form
*
* @ORM\Table(name="form")
* @ORM\Entity(repositoryClass="Ineat\FormGeneratorBundle\Entity\FormRepository")
* @UniqueEntity("name")
* @UniqueEntity("slug")
*/
class Form
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="slug", type="string", length=255)
*/
private $slug;
/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="Widget", mappedBy="form")
*/
private $widgets;
public function __construct()
{
$this->widgets = new ArrayCollection();
}
// getters and setters
}
还有一个 Widget 实体:
/**
* Widget
*
* @ORM\Table(name="widget_choices")
* @ORM\Entity
*/
class WidgetChoices extends Widget
{
/**
* @var array
*
* @ORM\Column(type="array")
*/
private $choices;
// getters and setters
}
每当我尝试显示我的表单时,都会出现以下错误:
类“Ineat\FormGeneratorBundle\Entity\Form”中不存在属性“WidgetText”或方法“getWidgetText()”或方法“isWidgetText()”
好像我的小部件根本没有扩展 Widget。我需要一种将我的小部件转换为 Widget 的方法,或者一种方法来告诉我的 ArrayCollection 可以包含扩展 Widget 的所有内容。
可能吗?