我的控制器应如何与Symfony2中的服务进行通信?

时间:2013-09-10 15:26:11

标签: php symfony model-view-controller

我正在努力使我的控制器变薄,完美的一个服务电话。所以我写下我的行动:

public function actionDoSomething($request, $arg1, $arg2)
{
    $result = $someService->doSomething($arg1, $arg2);

    if ($result === true)
        return 'Done';

    return 'Failed, but cannot say why';
}

现在我有疑虑:

  1. 将用户输入直接传递给服务是否正常, 没有任何卫生/过滤/验证?也许并不总是需要调用它(例如$arg1预期是整数但用户输入1.25)?

  2. 服务可能会做很多工作,控制器不知道。应该从服务中返回什么类型? boolean,integer,SomeResult类,数组,混合?如果失败,应该返回哪些数据? const值,消息数组?我需要它来回应。我可以采用任何标准或最佳做法吗?

1 个答案:

答案 0 :(得分:0)

  1. 传递给服务层的数据格式应由服务层本身驱动。您可以拥有多种UI - HTML,REST,命令行 - 每种用户都以不同方式与用户交换数据。所有这些类型的控制器都必须解析用户数据并以其理解的格式将其传递给服务层,反之亦然 - 从服务层获取数据并根据UI的类型对其进行格式化。

    最终验证可以在服务层完成,以确保无效数据无法通过,但您仍然可以从控制器调用验证服务,如果这可以帮助您以更友好的方式向用户报告验证错误

  2. 服务层返回的数据类型取决于您调用的方法应该执行的操作。例如,数据保存方法可能不返回任何内容,而数据提取实体将以您需要或喜欢的格式返回数据。

    你应该所做的是通过它返回的值来检查服务方法 - 或任何其他方法 - 的操作是否成功 - PHP例外是为此。也就是说,假设一切顺利,除非抛出异常。