Symfony / MVC 编写瘦控制器

Symfony / MVC write thin controllers

我有一个关于 Symfony 2 控制器构造的问题。 当我想处理一个表单时,我创建了一个单独的表单处理程序来处理表单并在我的控制器中调用这个处理程序:

public function registerAction()
{
  $formHandler = $this->container->get('fos_user.registration.form.handler');
  $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled');
  $process = $formHandler->process($confirmationEnabled);
  return new JsonResponse($process);
}

我是否也应该使用这种方法为只包含业务逻辑而不验证表单的控制器创建处理程序class?

例如当我在单独的处理程序中外包逻辑时,我用于注册确认的控制器操作如下所示:

public function confirmAction($token)
{
    $formHandler = $this->container->get('acme.register_confirm.handler');
    $process = $formHandler->process($token);
    return new JsonResponse($process);
}

并且我将处理此服务的处理方法中的逻辑。

或者我应该让控制器中的逻辑而不是创建另一个单独的处理程序class?

如果我采用这种方法,几乎​​所有控制器看起来都一样:

1) 获取表单处理程序 2)调用handler的process方法 3) return 响应

第二种方法更好。业务逻辑应该始终在 Services. This gives you a better separation of concerns 内部,这将使您的代码更可重用和可测试。如果你打电话给你的服务 handlerMyFancyBusinessLogicService 完全取决于你。