У меня есть действие контроллера, которое выполняется на одном сервере. Это действие должно запускать две другие службы, которые могут находиться на том же или другом сервере (в зависимости от настроенных маршрутов). В настоящее время я всегда использую HTTP-запросы. Но если службы находятся на одном сервере, я бы предпочел напрямую вызывать соответствующий контроллер (в зависимости от URL-адреса, соблюдая пользовательские маршруты).
Мой код с запросами выглядит так:
public function buildMultiple($platform, $name, $limit = null, $offset = null) {
$config = $this->getDI()->get('config');
$workerUrl = "{$config->application->WorkerUrl}/$platform/$name/compute/multiple/$limit/$offset";
$response = HttpRequest::get($workerUrl);
$data = json_decode($response)->data;
$clientUrl = "{$config->application->ClientUrl}/$platform/$name/update/multiple";
//TODO if the routes for the client are activated on this server then directly execute the controller
//if($config->application->ClientRoutes) {
// pseudocode:
// $cont = $this->router->getControllerFromUri($clientUrl);
// $result = $this->dispatcher($cont)->call($params, $postData);
// return $result;
//}
// else:
return HttpRequest::post($clientUrl, $data);
}
$this->dispatcher->forward
, но, как следует из названия, он перенаправляет выполнение действия другому действию. Типа возвращение сюда на самом деле ничего не даст. - person Juri   schedule 10.05.2017