/** * Inject the class name of the controller, if it can be resolved. * * @param RpcServiceEntity $service */ protected function injectControllerClass(RpcServiceEntity $service) { $controllerServiceName = $service->controllerServiceName; if (!$this->controllerManager->has($controllerServiceName)) { return; } $controller = $this->controllerManager->get($controllerServiceName); $service->exchangeArray(['controller_class' => get_class($controller)]); }
/** * @param Model\RestServiceEntity|Model\RpcServiceEntity $entity * @param EventInterface $e * @return void */ private function injectServiceCollectionRelationalLinks($entity, EventInterface $e) { $entity->exchangeArray(['controller_service_name' => str_replace('\\', '-', $entity->controllerServiceName)]); $module = $this->routeMatch->getParam('name'); $service = $entity->controllerServiceName; $type = $this->getServiceType($service); $halEntity = new Entity($entity, $service); $links = $halEntity->getLinks(); // Need to inject the self relational link, as otherwise the HAL plugin // sees we have links, and does not inject one. $links->add(Link::factory(['rel' => 'self', 'route' => ['name' => sprintf('zf-apigility/api/module/%s-service', $type), 'params' => ['name' => $module, 'controller_service_name' => $service]]])); // Add the input_filter relational link $links->add(Link::factory(['rel' => 'input_filter', 'route' => ['name' => sprintf('zf-apigility/api/module/%s-service/input-filter', $type), 'params' => ['name' => $module, 'controller_service_name' => $service]]])); // Add the documentation relational link $links->add(Link::factory(['rel' => 'documentation', 'route' => ['name' => sprintf('zf-apigility/api/module/%s-service/doc', $type), 'params' => ['name' => $module, 'controller_service_name' => $service]]])); $e->setParam('entity', $halEntity); }
/** * Fetch a single RPC service * * @todo get route details? * @param string $controllerServiceName * @return RpcServiceEntity|false */ public function fetch($controllerServiceName) { $data = ['controller_service_name' => $controllerServiceName]; $config = $this->configResource->fetch(true); if (!isset($config['zf-rpc'][$controllerServiceName])) { return false; } $rpcConfig = $config['zf-rpc'][$controllerServiceName]; if (isset($rpcConfig['route_name'])) { $data['route_name'] = $rpcConfig['route_name']; $data['route_match'] = $this->getRouteMatchStringFromModuleConfig($data['route_name'], $config); } if (isset($rpcConfig['http_methods'])) { $data['http_methods'] = $rpcConfig['http_methods']; } if (!empty($rpcConfig['service_name'])) { $data['service_name'] = $rpcConfig['service_name']; } else { $data['service_name'] = $controllerServiceName; $pattern = vsprintf('#%sV[^%s]+%sRpc%s(?<service>[^%s]+)%sController#', array_fill(0, 6, preg_quote('\\'))); if (preg_match($pattern, $controllerServiceName, $matches)) { $data['service_name'] = $matches['service']; } } if (isset($config['zf-content-negotiation'])) { $contentNegotiationConfig = $config['zf-content-negotiation']; if (isset($contentNegotiationConfig['controllers'][$controllerServiceName])) { $data['selector'] = $contentNegotiationConfig['controllers'][$controllerServiceName]; } if (isset($contentNegotiationConfig['accept_whitelist'][$controllerServiceName])) { $data['accept_whitelist'] = $contentNegotiationConfig['accept_whitelist'][$controllerServiceName]; } if (isset($contentNegotiationConfig['content_type_whitelist'][$controllerServiceName])) { $data['content_type_whitelist'] = $contentNegotiationConfig['content_type_whitelist'][$controllerServiceName]; } } $service = new RpcServiceEntity(); $service->exchangeArray($data); return $service; }
/** * Fetch a single RPC service * * @todo get route details? * @param string $controllerServiceName * @return RpcServiceEntity|false */ public function fetch($controllerServiceName) { $data = array('controller_service_name' => $controllerServiceName); $config = $this->configResource->fetch(true); if (!isset($config['zf-rpc'][$controllerServiceName])) { return false; } $rpcConfig = $config['zf-rpc'][$controllerServiceName]; if (isset($rpcConfig['route_name'])) { $data['route_name'] = $rpcConfig['route_name']; $data['route_match'] = $this->getRouteMatchStringFromModuleConfig($data['route_name'], $config); } if (isset($rpcConfig['http_methods'])) { $data['http_methods'] = $rpcConfig['http_methods']; } if (isset($rpcConfig['service_name']) && !empty($rpcConfig['service_name'])) { $data['service_name'] = $rpcConfig['service_name']; } else { $data['service_name'] = $controllerServiceName; $q = preg_quote('\\'); if (preg_match('#' . $q . 'V[^' . $q . ']+' . $q . 'Rpc' . $q . '(?<service>[^' . $q . ']+)' . $q . 'Controller#', $controllerServiceName, $matches)) { $data['service_name'] = $matches['service']; } } if (isset($config['zf-content-negotiation'])) { $contentNegotiationConfig = $config['zf-content-negotiation']; if (isset($contentNegotiationConfig['controllers']) && isset($contentNegotiationConfig['controllers'][$controllerServiceName])) { $data['selector'] = $contentNegotiationConfig['controllers'][$controllerServiceName]; } if (isset($contentNegotiationConfig['accept_whitelist']) && isset($contentNegotiationConfig['accept_whitelist'][$controllerServiceName])) { $data['accept_whitelist'] = $contentNegotiationConfig['accept_whitelist'][$controllerServiceName]; } if (isset($contentNegotiationConfig['content_type_whitelist']) && isset($contentNegotiationConfig['content_type_whitelist'][$controllerServiceName])) { $data['content_type_whitelist'] = $contentNegotiationConfig['content_type_whitelist'][$controllerServiceName]; } } $service = new RpcServiceEntity(); $service->exchangeArray($data); return $service; }