Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Config.php
Go to the documentation of this file.
1 <?php
7 
9 use Magento\Webapi\Model\ConfigInterface as ModelConfigInterface;
11 
15 class Config
16 {
20  const HTTP_METHOD_GET = 'GET';
21  const HTTP_METHOD_DELETE = 'DELETE';
22  const HTTP_METHOD_PUT = 'PUT';
23  const HTTP_METHOD_POST = 'POST';
24  const HTTP_METHOD_PATCH = 'PATCH';
30  const KEY_IS_SECURE = 'isSecure';
31  const KEY_CLASS = 'class';
32  const KEY_METHOD = 'method';
33  const KEY_ROUTE_PATH = 'routePath';
34  const KEY_ACL_RESOURCES = 'resources';
35  const KEY_PARAMETERS = 'parameters';
36  /*#@-*/
37 
38  /*#@-*/
39  protected $_config;
40 
44  protected $_routeFactory;
45 
50  public function __construct(
51  ModelConfigInterface $config,
52  \Magento\Framework\Controller\Router\Route\Factory $routeFactory
53  ) {
54  $this->_config = $config;
55  $this->_routeFactory = $routeFactory;
56  }
57 
70  protected function _createRoute($routeData)
71  {
73  $route = $this->_routeFactory->createRoute(
74  \Magento\Webapi\Controller\Rest\Router\Route::class,
75  $routeData[self::KEY_ROUTE_PATH]
76  );
77 
78  $route->setServiceClass($routeData[self::KEY_CLASS])
79  ->setServiceMethod($routeData[self::KEY_METHOD])
80  ->setSecure($routeData[self::KEY_IS_SECURE])
81  ->setAclResources($routeData[self::KEY_ACL_RESOURCES])
82  ->setParameters($routeData[self::KEY_PARAMETERS]);
83  return $route;
84  }
85 
92  protected function _getServiceBaseUrl($request)
93  {
94  $baseUrlRegExp = '#^/?\w+/\w+#';
95  $serviceBaseUrl = preg_match($baseUrlRegExp, $request->getPathInfo(), $matches) ? $matches[0] : null;
96 
97  return $serviceBaseUrl;
98  }
99 
107  public function getRestRoutes(\Magento\Framework\Webapi\Rest\Request $request)
108  {
109  $requestHttpMethod = $request->getHttpMethod();
110  $servicesRoutes = $this->_config->getServices()[Converter::KEY_ROUTES];
111  $routes = [];
112  // Return the route on exact match
113  if (isset($servicesRoutes[$request->getPathInfo()][$requestHttpMethod])) {
114  $methodInfo = $servicesRoutes[$request->getPathInfo()][$requestHttpMethod];
115  $routes[] = $this->_createRoute(
116  [
117  self::KEY_ROUTE_PATH => $request->getPathInfo(),
118  self::KEY_CLASS => $methodInfo[Converter::KEY_SERVICE][Converter::KEY_SERVICE_CLASS],
119  self::KEY_METHOD => $methodInfo[Converter::KEY_SERVICE][Converter::KEY_SERVICE_METHOD],
120  self::KEY_IS_SECURE => $methodInfo[Converter::KEY_SECURE],
121  self::KEY_ACL_RESOURCES => array_keys($methodInfo[Converter::KEY_ACL_RESOURCES]),
122  self::KEY_PARAMETERS => $methodInfo[Converter::KEY_DATA_PARAMETERS],
123  ]
124  );
125  return $routes;
126  }
127  $serviceBaseUrl = $this->_getServiceBaseUrl($request);
128  ksort($servicesRoutes, SORT_STRING);
129  foreach ($servicesRoutes as $url => $httpMethods) {
130  // skip if baseurl is not null and does not match
131  if (!$serviceBaseUrl || strpos(trim($url, '/'), trim($serviceBaseUrl, '/')) !== 0) {
132  // base url does not match, just skip this service
133  continue;
134  }
135  foreach ($httpMethods as $httpMethod => $methodInfo) {
136  if (strtoupper($httpMethod) == strtoupper($requestHttpMethod)) {
137  $aclResources = array_keys($methodInfo[Converter::KEY_ACL_RESOURCES]);
138  $routes[] = $this->_createRoute(
139  [
140  self::KEY_ROUTE_PATH => $url,
141  self::KEY_CLASS => $methodInfo[Converter::KEY_SERVICE][Converter::KEY_SERVICE_CLASS],
142  self::KEY_METHOD => $methodInfo[Converter::KEY_SERVICE][Converter::KEY_SERVICE_METHOD],
143  self::KEY_IS_SECURE => $methodInfo[Converter::KEY_SECURE],
144  self::KEY_ACL_RESOURCES => $aclResources,
145  self::KEY_PARAMETERS => $methodInfo[Converter::KEY_DATA_PARAMETERS],
146  ]
147  );
148  }
149  }
150  }
151 
152  return $routes;
153  }
154 }
$config
Definition: fraud_order.php:17
__construct(ModelConfigInterface $config, \Magento\Framework\Controller\Router\Route\Factory $routeFactory)
Definition: Config.php:50
getRestRoutes(\Magento\Framework\Webapi\Rest\Request $request)
Definition: Config.php:107