我对Symfony 2控制器的构造有疑问。 当我想处理一个表单时,我创建了一个单独的Form处理程序来处理表单并在我的控制器中调用这个处理程序:
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);
}
我是否还应该使用这种方法为仅包含业务逻辑且不验证表单的Controller创建Handler类?
e.g。当我将逻辑外包给一个单独的处理程序时,我的Controller注册确认操作将如下所示:
public function confirmAction($token)
{
$formHandler = $this->container->get('acme.register_confirm.handler');
$process = $formHandler->process($token);
return new JsonResponse($process);
}
我将处理此服务的流程方法中的逻辑。
或者我应该让控制器中的逻辑而不是创建另一个单独的处理程序类?
如果采用这种方法,几乎所有控制器看起来都是一样的:
1)获取表单处理程序 2)调用处理程序的进程方法 3)返回响应
答案 0 :(得分:1)
第二种方法是更好的做法。业务逻辑应始终位于Services之内。这样可以为您提供更好的separation of concerns,并使您的代码更具可重用性和可测试性。如果您致电您的服务handler
或MyFancyBusinessLogicService
完全取决于您。