放置此操作的正确位置/捆绑包是什么

时间:2013-02-13 09:38:44

标签: model-view-controller symfony

假设我有CoreBundle,其中有一个名为Event的实体。在CoreBundle中,事件可以是例如显示(showAction)。我也有一个BackendBundle。事件的deleteAction只能从后端触发。但是,deleteAction属于CoreBundle中定义的实体。 CoreBundleBackendBundle都有EventController

问题是:deleteAction是否应该放在BackendBundle的{​​{1}}或EventController的{​​{1}}中?

P.S。我知道两者都有效,但这更像是一个哲学问题。

1 个答案:

答案 0 :(得分:1)

我建议你BackendBundle EventControllerdeleteAction。这个deleteAction可能会调用CoreBundle中的特定处理程序(或管理器或其他),但我会将控制器代码保留在BackendBundle中。

首先,它可以轻松地在不切换捆绑的情况下遵循代码。我可以看到请求进来,要么删除实体,要么调用某个管理器,并发送重定向或呈现模板。

其次,更重要的是,如果你引入另一个后端有一个deleteAction的bundle,你可以有不同的处理方式(一个在它自己的bundle里面,一个在CoreBundle里面)或者你必须将它们命名为不同并造成大混乱。

在generell中,我遵守规则,让控制器位于路径和视图所在的同一束中,并且只共享模型。在CoreBundle的情况下,我处理控制器和模型之间的管理器删除。在您的情况下,deleteAction将获得EventManager服务,并使用对象或ID调用删除(根据我的需要)。这样,执行删除事件的代码就在一个地方,可以轻松更改。