上下文
我有一个自定义Event
实体,它有几个子实体:Problem
和Maintenance
(以及其他几个,但这两个应该足以描述问题)实体类继承自{ {1}}实体类。
Event
和addAction()
的{{1}},seeAction()
和modifyAction()
(显然)非常相似,但存在一些差异。
我想要一个按钮来显示ProblemController
的{{1}}视图,无论它是MaintenanceController
还是see
。修改相同。
对于添加操作,它有点不同:用户必须说(通过点击特定于孩子的按钮)他想要添加的孩子类型。
到目前为止我如何处理
在我的Event
和Problem
中,我只是根据孩子的类型转发“来电”:
Maintenance
我没有seeAction()
,但我有一个modifyAction()
,它收集了问题和维护的addAction的常见部分。然后我用Controller继承称这个public function seeAction(Event $event)
{
if($event instanceof \Acme\EventBundle\Entity\Problem){
return $this->forward('AcmeEventBundle:Problem:see', array('event_id' => $event->getId()));
}
elseif($event instanceof \Acme\EventBundle\Entity\Maintenance){
return $this->forward('AcmeEventBundle:Maintenance:see', array('maintenance_id' => $event->getId()));
}
}
。
Event::addAction()
问题
这一切对我来说都很难看。如果我想在Event::addCommon()
和Event::addCommon()
之间分享常见内容,我必须调用class ProblemController extends EventController
{
public function addAction(MeasurementSite $measurementSite)
{
$problem = new Problem();
$problem->setMeasurementSite($measurementSite);
$form = $this->createForm(new ProblemType($measurementSite), $problem);
$response = parent::addCommon($problem, $form);
return $response;
}
函数,但Problem::seeAction()
已转发了某些内容!信息从父母跳到孩子,反之亦然......
我想知道管理这个问题的正确方法是什么?
我看了一下将Controller设置为服务,使用PHP Traits,路由继承,但我无法从这项研究中提取任何清晰明确的内容......
答案 0 :(得分:0)
我可以看到你如何最终在这类问题上追逐你的尾巴。
考虑为所有路径配备一个EventController以及各个ProblemHelper和MaintainenceHelper对象,而不是多个控制器。辅助对象将具有add / see / modify方法,并且可以扩展CommonHelper类。
您的控制器将检查实体类型,实例化帮助程序并将控制权传递给它。