在Symfony2中,服務被定義爲[重點礦山]:Symfony2服務總是需要在包中聲明嗎?
A服務是用於執行一個 特定任務的任何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束內標有「服務」的文件夾。如果「服務」文件夾在任何特定包之外存儲了一個或多個更高級別的文件夾,那麼這樣做會不會更好?因爲服務旨在用於整個應用程序?
- 這裏最好的做法是什麼?
- 此服務僅適用於HelloBundle包內的控制器嗎?
- 爲什麼通常這樣做?