2013-12-13 42 views
0

我必须处理“测量链”,每个测量链由1个测量仪器和几个罐组成。链,仪器和坦克在一个位置。执行他人的控制器动作

显然,在一个位置A中的链不能由位于位置B或C的元件的

所以我有下列对象:

  • CHAIN
    • chain_id
    • location_id
    • instrument_id
    • date_creation
    • date_destruction
  • INSTRUMENT
    • INSTRUMENT_ID
    • LOCATION_ID
  • TANK
    • tank_id
    • LOCATION_ID
  • TANK_IN_CHAIN
    • tank_in_chain_id
    • tank_id
    • chain_id
    • date_connection
    • date_disconnection
  • LOCATION
    • LOCATION_ID

我想要做的是:

  • 当我在一个新的位置移动的工具(在InstrumentController moveAction()),链应该detroyed
  • 当我移动在TankController中移动一个坦克(moveAction()),链应该被销毁
  • “销毁”一个链意味着:chain.date_destruction设置为now()和tank_in_chain.date_disconnection设置为now() 。这在ChainController的destroAction做(因为有时我也需要破坏,即使没有仪器或移动坦克链)

我的问题是:

如何调用ChainController :: destroyAction( )从InstrumentController :: moveAction()或TankController :: moveAction()?

我读了关于forward()函数,但从我的理解,这不是我所需要的。 我看到的另一种可能性是将ChainController设置为服务,但我不确定这是解决此问题的正确方法,即它可以工作,但这不是“良好实践”。

您认为如何?

坦克的任何帮助! 干杯。

回答

0

您是否考虑过在控制器内部使用forward方法?

但对我而言,处理实体中可能导致另一个实体发生变化的变化的正确位置是实体级别。这意味着您的实体中应该有一些侦听器方法来侦听此实体的更改,以便它可以触发相关实体的更改。在你的情况,我会:仪器仪表实体

  • 一个PostUpdate方法
  • 一个PostUpdate方法在坦克实体
  • 然后在每个这种方法,设置date_destruction到现在的相关链实体。

看看主义生命周期回调http://symfony.com/doc/current/book/doctrine.html#lifecycle-callbacks

+0

谢谢。生命周期回调似乎对我来说太简单了(我给出的例子是为了更好的理解而被简化的),但是阅读文档似乎有些“正常”事件可以正确地完成这项工作。我会调查一下。 – Blacksad

+0

是的,我更喜欢在这种情况下使用事件监听器。而且你甚至可以将它与服务相结合,以便于测试:) – passkey1510

+0

我设法创建Event和Listener来在一件乐器或坦克移动时摧毁一条链子。现在,我试图在链条被上述提到的事件破坏时断开坦克。换句话说,我想从EventListener触发一个事件,但函数get()在:$ this-> get('event_dispatcher') - > dispatch(CoreEvents :: onChainDestruction,$ event);在控制器外部不被识别。我在网络上发现了很多类似的问题,但我仍然不清楚该怎么做。任何想法? – Blacksad

0

这个好方法是定义你的controller as service

+0

谢谢您的回答。我看到了这种可能性,但是在Service Container Cookbook页面中,它写道:“服务是任何执行某种全局任务的PHP对象”,比如mailling。这不是我的情况,这个detroyAction()不是全局的:例如,我不想从LocationController访问它。这就是为什么我想知道它是否真的是正确的。 – Blacksad

相关问题