使用控制器作为服务的具体示例?

时间:2015-04-24 14:58:35

标签: php symfony service controller

我在文档如何将控制器用作服务中阅读。但我不确定它的目的是什么。那么为什么不简单地使用服务(一个类定义为服务)?

如果有人能给我一些很好的例子,可以在一项很棒的服务中转换控制器

1 个答案:

答案 0 :(得分:1)

经典的Symfony控制器使用Service Locater模式来引入它的依赖关系:

class PersonController
{
  public function showAction()
  {
    $personRepository = 
      $this->getDoctrine()->getEntityManager()->getRepository('Entity\Person');
    $person = $personRepository->find(1);
    return new JsonResponse($person);

获取人员存储库需要该操作具有关于如何定位事物的相当多的知识。事实上有些神奇。控制器直接与学说和框架基础结构相关联。

这也使得行动难以测试。在运行操作之前,您必须创建一个容器,然后定义必要的服务。

将控制器定义为服务器与其注入的依赖关系进行对比:

class PersonController
{
  protected $personRepository;
  public function __construct($personRepository) 
  {
    $this->personRepository = $personRepository;
  }
  public function showAction()
  {
    $person = $this->personRepository->find(1);

该操作不再需要了解如何找到存储库。它就在那里。对于测试,只需要创建一个存储库并注入它。干净简单。