我正在将旧的代码库移到Symfony 2.2框架中。
在我的旧代码中,我的文章实体有一个方法 getUrl(),它返回了当前文章的网址。
在Symfony中,我必须使用路由器服务来生成此类网址。
我无法从实体内部访问路由器,因为这是一种不好的做法,而且框架并不真正支持。
我可以使用Twig helper path()从Twig模板本身调用路由器,并提供构造URL所需的所有参数(来自Article实例)。但是这种方法不是很好,因为如果我决定更改URL格式规则 - 我将不得不找到所有这些调用并重写它们(不是非常 DRY )。
我真的想在这里保存业务逻辑封装,而不是把所有的内容都拉到视图层。
我应该如何处理这种情况?
答案 0 :(得分:11)
在服务层中创建一个ArticleManager
类,并在那里处理任何业务逻辑。您可以通过依赖注入将路由器传递给它。
对于您的示例,ArticleManager
将使用getUrl(Article $article)
方法,该方法将使用路由器实例(您通过__construct
注入或单独的setter方法)来生成基于的Url $article
的属性,并将其返回。
此方法将确保您的业务逻辑不会污染视图或控制器层。
请务必阅读Service Container docs。