【发布时间】:2012-02-08 00:30:03
【问题描述】:
在 Symfony2 中,服务被定义为 [emphasis mine]:
服务是任何 PHP 对象的通用术语,它执行 具体任务。服务通常用于“全局”,例如 数据库连接对象或传递电子邮件的对象。 在 Symfony2 中,服务通常是从 服务容器。具有许多解耦服务的应用程序是 据说遵循面向服务的架构。
以“全局”为关键词,我看到的所有关于如何定义服务的示例都在现有捆绑包中声明了服务?这是来自MartinSikora.com的示例
<?php
// Bundle/HelloBundle/Services/MyService.php
namespace Bundle\HelloBundle\Services;
class MyService {
public function sum($n1, $n2) {
return $n1 + $n2;
}
}
?>
然后他在 Hello 控制器中使用它:
<?php
// Bundle/HelloBundle/Controller/HelloController.php
namespace Bundle\HelloBundle\Controller;
class HelloController extends Controller {
public function indexAction() {
$number = $this->get('my_service')->sum(12, 37);
// this returns 49
/*
...
*/
}
}
?>
注意他的示例服务是如何在 HelloBundle 包中标有“Services”的文件夹中声明的。如果将“服务”文件夹存储在任何特定捆绑包之外的一个或多个更高级别,因为服务旨在在整个应用程序中使用,那不是更好吗?
- 这里的最佳做法是什么?
- 该服务是否仅适用于 HelloBundle Bundle 中的控制器?
- 为什么通常这样做?
【问题讨论】:
标签: php model-view-controller symfony bundle