8

我正在将我的旧代码库移动到 Symfony 2.2 框架。

在我的旧代码中,我的 Article 实体有一个方法getUrl(),它返回当前文章的 URL。

在 Symfony 中,我必须使用路由器服务来生成这样的 URL。

我无法从实体内部访问路由器,因为这是一种不好的做法,并且框架并不真正支持。

我可以使用 Twig helper path()从 Twig 模板本身调用路由器,并提供构造 URL 所需的所有参数(来自 Article 实例)。但是这种方法不是很好,因为如果我决定更改 URL 格式规则 - 我将不得不找到所有这些调用并重写它们(不是很干燥)。

我真的想在这里保存业务逻辑封装,而不是把所有的胆量都拉到视图层。

在这种情况下我应该如何进行?

4

1 回答 1

11

在您的服务层中创建一个ArticleManager类,并在那里处理任何业务逻辑。您可以通过依赖注入将路由器传递给它。

对于您的示例,ArticleManager将有一个getUrl(Article $article)方法将使用路由器实例(您通过注入__construct或单独的 setter 方法)根据 的属性生成 Url$article并返回它。

此方法将确保您的业务逻辑不会污染视图或控制器层。

请务必阅读服务容器文档

于 2013-03-15T13:16:32.293 回答