继承 - 在子控制器和父控制器之间共享信息

时间:2014-02-24 15:17:35

标签: symfony

上下文

我有一个自定义Event实体,它有几个子实体:ProblemMaintenance(以及其他几个,但这两个应该足以描述问题)实体类继承自{ {1}}实体类。

EventaddAction()的{​​{1}},seeAction()modifyAction()(显然)非常相似,但存在一些差异。

我想要一个按钮来显示ProblemController的{​​{1}}视图,无论它是MaintenanceController还是see。修改相同。

对于添加操作,它有点不同:用户必须说(通过点击特定于孩子的按钮)他想要添加的孩子类型。

到目前为止我如何处理

在我的EventProblem中,我只是根据孩子的类型转发“来电”:

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,路由继承,但我无法从这项研究中提取任何清晰明确的内容......

1 个答案:

答案 0 :(得分:0)

我可以看到你如何最终在这类问题上追逐你的尾巴。

考虑为所有路径配备一个EventController以及各个ProblemHelper和MaintainenceHelper对象,而不是多个控制器。辅助对象将具有add / see / modify方法,并且可以扩展CommonHelper类。

您的控制器将检查实体类型,实例化帮助程序并将控制权传递给它。