Inheritance Symfony2遗传

Inheritance Symfony2遗传,inheritance,symfony,Inheritance,Symfony,由于我们不仅可以在实体中使用继承,还可以在表单中使用继承,因此我设计了以下结构: 实体 班主任 班主任延伸人 班级学生延伸人 模板 类人形 类ProfessorType扩展PersonType 类StudentType扩展了PersonType 现在,我的问题出在控制器上。我不知道是应该为所有子实体使用person控制器,还是应该为每个子类创建特定的控制器。 使用通用控制器有助于处理实体之间的公共逻辑,此外,不必在每次创建新的子类时添加整个控制器,但另一方面,处理每个子类的特定数据非常复

由于我们不仅可以在实体中使用继承,还可以在表单中使用继承,因此我设计了以下结构:

实体

  • 班主任
  • 班主任延伸人
  • 班级学生延伸人
模板

  • 类人形
  • 类ProfessorType扩展PersonType
  • 类StudentType扩展了PersonType
现在,我的问题出在控制器上。我不知道是应该为所有子实体使用person控制器,还是应该为每个子类创建特定的控制器。

使用通用控制器有助于处理实体之间的公共逻辑,此外,不必在每次创建新的子类时添加整个控制器,但另一方面,处理每个子类的特定数据非常复杂。例如,如果我加载一个“person”,然后我想编辑或显示它,我需要知道它对应的表单类型和模板,但这在那个级别是不可能的。我应该使用嵌套的“if”来获取person的类,从而创建正确的formtype和模板(硬代码)。这将不是“动态的”


也许我可以用不同的方法来解决这个问题,但我想知道对于这个问题,什么是最好的(或者至少是好的)解决方案?我也应该在控制器中使用继承吗?如何操作?

我们需要更多地了解您的应用程序

无论如何,这取决于控制器的用途。您可以定义一个共同的祖先控制器,然后是扩展前者的子控制器,您将在其中重新定义所需的方法


当然,每个操作都需要特定的路径。

谢谢@moonwave99的回答。那么,按照我之前描述的结构,您将如何显示个人资料?您是否会使用名为“PersonController”的唯一控制器和名为“showAction”的操作,然后加载此人并定义有关其是教授还是学生的细枝模板?或者你会创建两个特定的控制器(一个用于学生,另一个用于教授)?我什么时候需要编辑它呢?(使用不同的表单类型)