我正在建造一個使用Symfony 2.2和Doctrine的表單生成器。ArrayCollection的對象擴展了一個抽象的MappedSuperClass
我的實體如下:
- 形式
- WidgetText
- WidgetSelect
我所有的小部件擴展以下類:
/**
* 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
}
我的表單實體外觀像這樣S:
/**
* 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
*
* @ORM\Table(name="widget_choices")
* @ORM\Entity
*/
class WidgetChoices extends Widget
{
/**
* @var array
*
* @ORM\Column(type="array")
*/
private $choices;
// getters and setters
}
每當我試圖顯示自己的狀態,我得到了以下錯誤:
Neither property "WidgetText" nor method "getWidgetText()" nor method "isWidgetText()" exists in class "Ineat\FormGeneratorBundle\Entity\Form"
現在看來,這就像如果我的小工具根本沒有擴展Widget。 我需要一種方法來將我的小部件作爲Widget進行投射,或者通過一種方法告訴我的ArrayCollection可以包含擴展Widget的所有內容。
可能嗎?
在'WidgetText'實體,你有一個'$文本「財產和公共的吸氣劑和二流子來吧? – cheesemacfly
是的,我有相應的setter和getter。 – DevAntoine