getQueryString() public method

It builds a normalized query string, where keys/value pairs are alphabetized and have consistent escaping.
public getQueryString ( ) : string | null
return string | null A normalized query string for the Request
 /**
  * @param CanonicalUrlEvent $event
  */
 public function generateUrlCanonical(CanonicalUrlEvent $event)
 {
     if ($event->getUrl() !== null) {
         return;
     }
     $parseUrlByCurrentLocale = $this->getParsedUrlByCurrentLocale();
     if (empty($parseUrlByCurrentLocale['host'])) {
         return;
     }
     // Be sure to use the proper domain name
     $canonicalUrl = $parseUrlByCurrentLocale['scheme'] . '://' . $parseUrlByCurrentLocale['host'];
     // preserving a potential subdirectory, e.g. http://somehost.com/mydir/index.php/...
     $canonicalUrl .= $this->request->getBaseUrl();
     // Remove script name from path, e.g. http://somehost.com/index.php/...
     $canonicalUrl = preg_replace("!/index(_dev)?\\.php!", '', $canonicalUrl);
     $path = $this->request->getPathInfo();
     if (!empty($path) && $path != "/") {
         $canonicalUrl .= $path;
         $canonicalUrl = rtrim($canonicalUrl, '/');
     } else {
         $queryString = $this->request->getQueryString();
         if (!empty($queryString)) {
             $canonicalUrl .= '/?' . $queryString;
         }
     }
     $event->setUrl($canonicalUrl);
 }
 function get(Request $req)
 {
     $resourceName = $req->get('resource');
     if (!isset($this->module["resourceEntityMappings"][$resourceName])) {
         throw new NotFoundHttpException();
     }
     $entityClass = $this->module["namespace"] . $this->module["resourceEntityMappings"][$resourceName];
     // Filterer entities queried?
     if ($req->getQueryString() != null) {
         $querystring = $req->getQueryString();
         $criteria = array();
         $queryParts = \explode('&', $querystring);
         foreach ($queryParts as $queryPart) {
             $key_value = \explode('=', $queryPart);
             $criteria[$key_value[0]] = urldecode($key_value[1]);
         }
         $entities = $this->em->getRepository($entityClass)->findBy($criteria);
         // Single entity queried?
     } elseif ($req->get('id') != null) {
         $id = $req->get('id');
         $entity = $this->em->getRepository($entityClass)->find($id);
         $entities = array($entity);
     } else {
         $entities = $this->em->getRepository($entityClass)->findAll();
     }
     return new Response($this->serializer->serialize(array($resourceName => $entities), 'json'), 200, array('Content-Type' => $req->getMimeType('json')));
 }
 /**
  * Action for locale switch
  *
  * @param Request $request
  *
  * @throws \InvalidArgumentException
  * @return RedirectResponse
  */
 public function switchAction(Request $request)
 {
     $_locale = $request->attributes->get('_locale', $request->getLocale());
     $statusCode = $request->attributes->get('statusCode', $this->statusCode);
     $useReferrer = $request->attributes->get('useReferrer', $this->useReferrer);
     $redirectToRoute = $request->attributes->get('route', $this->redirectToRoute);
     $metaValidator = $this->metaValidator;
     if (!$metaValidator->isAllowed($_locale)) {
         throw new \InvalidArgumentException(sprintf('Not allowed to switch to locale %s', $_locale));
     }
     // Redirect the User
     if ($useReferrer && $request->headers->has('referer')) {
         $response = new RedirectResponse($request->headers->get('referer'), $statusCode);
     } elseif ($this->router && $redirectToRoute) {
         $target = $this->router->generate($redirectToRoute, array('_locale' => $_locale));
         if ($request->getQueryString()) {
             if (!strpos($target, '?')) {
                 $target .= '?';
             }
             $target .= $request->getQueryString();
         }
         $response = new RedirectResponse($target, $statusCode);
     } else {
         // TODO: this seems broken, as it will not handle if the site runs in a subdir
         // TODO: also it doesn't handle the locale at all and can therefore lead to an infinite redirect
         $response = new RedirectResponse($request->getScheme() . '://' . $request->getHttpHost() . '/', $statusCode);
     }
     return $response;
 }
Example #4
0
 /**
  * Handle and return response.
  *
  * @return Response
  *
  * @throws BadRequestException
  */
 public function serve()
 {
     Log::debug('Request received:', ['Method' => $this->request->getMethod(), 'URI' => $this->request->getRequestUri(), 'Query' => $this->request->getQueryString(), 'Protocal' => $this->request->server->get('SERVER_PROTOCOL'), 'Content' => $this->request->getContent()]);
     $result = $this->handleRequest();
     $response = $this->buildResponse($result['response']);
     Log::debug('Server response created:', compact('response'));
     return new Response($response);
 }
 /**
  * @return string
  */
 private function getPathWithQueryString()
 {
     $path = $this->message->getPathInfo();
     $qs = $this->message->getQueryString();
     if ($qs === null) {
         return $path;
     } else {
         return "{$path}?{$qs}";
     }
 }
 /**
  * @return string|null
  */
 public function getQueryString()
 {
     // Symfony\Component\HttpFoundation\Request::getQueryString() is not
     // suitable for HTTP signatures as it mangles the query string.
     if ($this->request->getQueryString() === null) {
         return;
     } else {
         return $this->request->server->get('QUERY_STRING');
     }
 }
 public function writeLog(Request $request)
 {
     if ($this->getRequestCount() == 0) {
         return;
     }
     $message = sprintf('Executed %s API calls in %sms', $this->getRequestCount(), round($this->getTotalRequestTime() * 1000, 1));
     $context = array('requestCount' => $this->getRequestCount(), 'totalRequestTime' => $this->getTotalRequestTime(), 'method' => $request->getMethod(), 'path' => $request->getPathInfo());
     if ($request->getQueryString()) {
         $context['query'] = $request->getQueryString();
     }
     $this->logger->info($message, $context);
 }
 /**
  * @param Request $request
  * @return JsonResponse
  */
 public function indexAction(Request $request, $formatName = "default")
 {
     $payload = file_get_contents('php://input');
     $content = "queryString: " . $request->getQueryString() . "\n payload: " . $payload;
     file_put_contents("/tmp/koalamon/webhook_" . $formatName . ".log", json_encode($content));
     $project = $this->getProject($request->get("api_key"));
     if ($project == null) {
         return $this->getJsonRespone(self::STATUS_FAILURE, "No project with api_key " . $request->get("api_key") . ' found.');
     }
     $rawEvent = $this->getFormatHandler()->run($formatName, $request, $payload);
     if ($rawEvent === false) {
         return $this->getJsonRespone(self::STATUS_SKIPPED);
     }
     $event = new Event();
     $event->setStatus($rawEvent->getStatus());
     $event->setMessage($rawEvent->getMessage());
     $event->setSystem($rawEvent->getSystem());
     $event->setType($rawEvent->getType());
     $event->setUnique($rawEvent->isUnique());
     $event->setUrl($rawEvent->getUrl());
     $event->setValue($rawEvent->getValue());
     $em = $this->getDoctrine()->getManager();
     $identifier = $em->getRepository('BauerIncidentDashboardCoreBundle:EventIdentifier')->findOneBy(array('project' => $project, 'identifier' => $rawEvent->getIdentifier()));
     if (is_null($identifier)) {
         $identifier = new EventIdentifier();
         $identifier->setProject($project);
         $identifier->setIdentifier($rawEvent->getIdentifier());
         $em->persist($identifier);
         $em->flush();
     }
     $event->setEventIdentifier($identifier);
     $translatedEvent = $this->translate($event);
     ProjectHelper::addEvent($this->get("Router"), $em, $translatedEvent);
     return $this->getJsonRespone(self::STATUS_SUCCESS);
 }
 private function getRequestRelativeUri(Request $request)
 {
     if (null !== ($qs = $request->getQueryString())) {
         $qs = '?' . $qs;
     }
     return trim($request->getPathInfo(), '/') . $qs;
 }
Example #10
0
 public function logExecTime(Request $request)
 {
     $execTime = round(microtime(true) - $this['timer.start'], 6) * 1000;
     $message = sprintf('Script executed in %sms.', $execTime);
     $context = array('msExecTime' => $execTime, 'method' => $request->getMethod(), 'path' => $request->getPathInfo());
     if ($request->getQueryString()) {
         $context['query'] = $request->getQueryString();
     }
     if ($execTime < $this['timer.threshold_info']) {
         $this['logger']->debug($message, $context);
     } elseif ($execTime < $this['timer.threshold_warning']) {
         $this['logger']->info($message, $context);
     } else {
         $this['logger']->warn($message, $context);
     }
 }
 public function indexAction(Request $request)
 {
     try {
         $this->get('naoned.oaipmh.ruler')->checkParamsUnicity($request->getQueryString());
         $this->allArgs = $this->getAllArguments($request);
         if (!array_key_exists('verb', $this->allArgs)) {
             throw new BadVerbException('The verb argument is missing');
         }
         $verb = $this->allArgs['verb'];
         if (!in_array($verb, $this->availableVerbs)) {
             throw new BadVerbException('Value of the verb argument is not a legal OAI-PMH verb.');
         }
         $methodName = $verb . 'Verb';
         return $this->{$methodName}($request);
     } catch (\Exception $e) {
         if ($e instanceof OaiPmhServerException) {
             $reflect = new \ReflectionClass($e);
             //Remove «Exception» at end of class namespace
             $code = substr($reflect->getShortName(), 0, -9);
             // lowercase first char
             $code[0] = strtolower(substr($code, 0, 1));
         } elseif ($e instanceof NotFoundHttpException) {
             $code = 'notFoundError';
         } else {
             $code = 'unknownError';
         }
         return $this->error($code, $e->getMessage());
     }
 }
 /**
  * Extracts filters from the Request
  */
 protected function parseRequest()
 {
     $this->parameters = [];
     $this->groups = [];
     $matchResult = preg_match_all('/(?P<key>((?P<group>[\\w\\d-\\.]+)(?P<path>(%5B[\\w\\d-\\.]+%5D)*)))' . '(?P<operator>(<|>|%3C|%3E)?=|<>|%3C%3E|(<|>|%3C|%3E))' . '(?P<value>[^&]+)/', $this->request->getQueryString(), $matches, PREG_SET_ORDER);
     if (false !== $matchResult) {
         foreach ($matches as $match) {
             $key = strtolower(rawurldecode($match['key']));
             $group = strtolower(rawurldecode($match['group']));
             $path = strtolower(rawurldecode($match['path']));
             $path = !empty($path) ? strtr($path, ['][' => ConfigUtil::PATH_DELIMITER, '[' => '', ']' => '']) : $key;
             $value = new FilterValue($path, rawurldecode($match['value']), rawurldecode(strtolower($match['operator'])));
             $this->parameters[$key] = $value;
             $this->groups[$group][$key] = $value;
         }
     }
 }
Example #13
0
 /**
  * @param Request $request
  * @return string
  */
 public static function completeTrailingSlash(Request $request)
 {
     $queryString = $request->getQueryString();
     if ($queryString !== null) {
         $queryString = '?' . $queryString;
     }
     return $request->getBaseUrl() . $request->getPathInfo() . '/' . $queryString;
 }
 public function generateMetaTagKey(Request $request, RouterInterface $router, $locale)
 {
     $pathInfo = $request->getPathInfo();
     $key = $this->generateMetaTagKeyFromRelativePath($pathInfo, $router, $locale);
     if ($this->addQueryString) {
         $key .= '?' . $request->getQueryString();
     }
     return $key;
 }
 /**
  * {@inheritdoc}
  */
 public function create()
 {
     if (null === $this->request) {
         return null;
     }
     $http = new Http($this->request->getUriForPath($this->request->getPathInfo()), $this->request->getMethod());
     $queryString = $this->request->getQueryString();
     if (strlen($queryString) > 0) {
         $http->setQueryString($queryString);
     }
     $http->setData($this->request->request->all());
     $http->setCookies($this->request->cookies->all());
     $http->setHeaders(array_map(function (array $values) {
         return count($values) === 1 ? reset($values) : $values;
     }, $this->request->headers->all()));
     $http->setEnv($this->request->server->all());
     return $http;
 }
 /**
  * This method validates a redirect against request. If they match,
  * returns destination URL for redirection.
  *
  * @param Request $request
  * @return bool|string
  */
 protected function redirectMatchesRequest(Redirect $redirect, Request $request)
 {
     $source_url = $redirect->getSourceUrl();
     $destination_url = $redirect->getDestinationUrl();
     $match_host = false;
     if (false !== strpos($source_url, '://')) {
         $match_host = true;
         $parsed_src = parse_url($source_url);
     }
     // test hostname first
     if ($match_host && !preg_match('/^' . preg_quote($parsed_src['host'], '/') . '$/', $request->getHost())) {
         return false;
     }
     $requested_url = $request->getPathInfo();
     if ($request->getQueryString()) {
         $requested_url .= '?' . $request->getQueryString();
     }
     if ($match_host) {
         $source_regex = $parsed_src['path'];
     } else {
         $source_regex = $source_url;
     }
     // prepare regexp
     $source_regex = $source_regex;
     $source_regex = str_replace('/', '\\/', $source_regex);
     $source_regex = str_replace('?', '\\?', $source_regex);
     $found = preg_match_all('/^' . $source_regex . '.*$/', $requested_url, $matches);
     if (!$found) {
         return false;
     }
     // replace tokens
     if (isset($matches[1]) && count($matches[1] > 0)) {
         $replacements = array();
         foreach ($matches[1] as $k => $m) {
             $replacements['$' . ($k + 1)] = $m;
         }
         $destination_url = strtr($destination_url, $replacements);
     }
     if (false === strpos($destination_url, '://')) {
         $destination_url = $request->getBaseUrl() . $destination_url;
     }
     return $destination_url;
 }
Example #17
0
 /**
  * Checks if the user should be forced to use SSL connections.
  *
  * @param Request $request Request to check.
  * @return boolean|\Symfony\Component\HttpFoundation\RedirectResponse False
  *   if the redirect is not needed and redirect response object otherwise.
  */
 protected function sslRedirect(Request $request)
 {
     $need_redirect = Settings::get('enablessl') == '1' && Settings::get('forcessl') == '1' && !$request->isSecure();
     if (!$need_redirect) {
         return false;
     }
     if (null !== ($qs = $request->getQueryString())) {
         $qs = '?' . $qs;
     }
     $path = 'https://' . $request->getHttpHost() . $request->getBasePath() . $request->getPathInfo() . $qs;
     return $this->redirect($path);
 }
 public function phasesAction(Request $request, $board_id)
 {
     $storageManager = $this->get('storage_manager');
     $logger = $this->get('logger');
     $logger->info("board_id: {$board_id}");
     $queryString = $request->getQueryString();
     $logger->info("query string: {$queryString}");
     $url = 'projects/' . $board_id . '/phases';
     $response = $storageManager->restClient->doGet($url, $queryString);
     $json = json_encode($response);
     return new Response($json, 200, array('Content-Type' => 'application/json'));
 }
Example #19
0
 public function orderAction(Request &$request)
 {
     $id = $request->request->get('id');
     $order = $request->request->get('order');
     if ($item = $this->getItem($id)) {
         $item->setOrder($order);
         $this->getEntityManager()->persist($item);
         $this->getEntityManager()->flush();
     }
     return $this->redirect('list?' . $request->getQueryString());
     //echo 'order';
 }
 /**
  * Creates a previous page link if avialiable.
  * @param \Symfony\Component\HttpFoundation\Request $request
  * @param int $offset
  * @param int $limit
  * @param int $total
  * @return \Symfony\Component\HttpFoundation\Request mixed
  */
 protected function createNextLink(Request $request, $offset, $limit, $total)
 {
     $nextLink = null;
     $baseUri = $request->getSchemeAndHttpHost() . $request->getBaseUrl() . $request->getPathInfo();
     if ($offset + $limit < $total) {
         parse_str($request->getQueryString(), $qsArray);
         $qsArray['limit'] = $limit;
         $qsArray['offset'] = $limit + $offset;
         $qs = Request::normalizeQueryString(http_build_query($qsArray));
         $nextLink = $baseUri . '?' . $qs;
     }
     return $nextLink;
 }
Example #21
0
 /**
  * Handle and return response.
  *
  * @return Response
  *
  * @throws BadRequestException
  */
 public function serve()
 {
     Log::debug('Request received:', ['Method' => $this->request->getMethod(), 'URI' => $this->request->getRequestUri(), 'Query' => $this->request->getQueryString(), 'Protocal' => $this->request->server->get('SERVER_PROTOCOL'), 'Content' => $this->request->getContent()]);
     $this->validate($this->token);
     if ($str = $this->request->get('echostr')) {
         Log::debug("Output 'echostr' is '{$str}'.");
         return new Response($str);
     }
     $result = $this->handleRequest();
     $response = $this->buildResponse($result['to'], $result['from'], $result['response']);
     Log::debug('Server response created:', compact('response'));
     return new Response($response);
 }
Example #22
0
 /**
  * @param Request $request
  * @return string
  */
 private function parsePaginationlessUrl(Request $request)
 {
     $url = $request->getPathInfo();
     $query = $request->getQueryString();
     if (!empty($query)) {
         $params = explode('&', $query);
         $callback = function ($pair) {
             list($key, $value) = explode('=', $pair);
             return !in_array($key, ['page', 'size']);
         };
         $params = array_filter($params, $callback);
         $url .= '?' . implode('&', $params);
     }
     return Url::fromString($url);
 }
Example #23
0
 public function proxyAction(Request $request, $url)
 {
     $content = file_get_contents($url . '?' . $request->getQueryString());
     $response = new Response();
     foreach ($http_response_header as $value) {
         if (preg_match('/^Content-Type:(.*)/i', $value, $matches)) {
             $type = $matches[1];
             $response->headers->set('Content-Type', $type);
             if (preg_match('/javascript/i', $type)) {
                 $content = preg_replace('@(http://)(?!www\\.w3\\.org)@', '/proxy/$1', $content);
             }
         }
     }
     $response->setContent($content);
     return $response;
 }
 public function start(Request $request, AuthenticationException $authException = null)
 {
     $scheme = $request->isSecure() ? 'http' : 'https';
     if ('http' === $scheme && 80 != $this->httpPort) {
         $port = ':' . $this->httpPort;
     } elseif ('https' === $scheme && 443 != $this->httpsPort) {
         $port = ':' . $this->httpsPort;
     } else {
         $port = '';
     }
     $qs = $request->getQueryString();
     if (null !== $qs) {
         $qs = '?' . $qs;
     }
     $url = $scheme . '://' . $request->getHost() . $port . $request->getBaseUrl() . $request->getPathInfo() . $qs;
     return new RedirectResponse($url, 301);
 }
Example #25
0
 public function getAction($hash, Request $request)
 {
     $class = $request->get('class');
     $username = $request->get('username');
     $logger = $this->get('logger');
     $logger->warn(json_encode(array('class' => $class, 'username' => $username)));
     $logger->warn($request->getUri());
     $replicator = $this->container->get('symcloud_storage.database.replicator');
     try {
         $data = $replicator->fetch($hash, $class, $username);
     } catch (NotPrimaryServerException $ex) {
         return $this->redirect(sprintf('%s:%s/%s?%s', $ex->getPrimaryServer()->getHost(), $ex->getPrimaryServer()->getPort(), ltrim($request->getPathInfo(), '/'), $request->getQueryString()));
     } catch (ObjectNotFoundException $ex) {
         return $this->handleView($this->view(null, 404));
     }
     return $this->handleView($this->view($data));
 }
 public function start(EventInterface $event, Request $request, AuthenticationException $authException = null)
 {
     $scheme = $request->isSecure() ? 'http' : 'https';
     if ('http' === $scheme && 80 != $this->httpPort) {
         $port = ':' . $this->httpPort;
     } elseif ('https' === $scheme && 443 != $this->httpPort) {
         $port = ':' . $this->httpsPort;
     } else {
         $port = '';
     }
     $qs = $request->getQueryString();
     if (null !== $qs) {
         $qs = '?' . $qs;
     }
     $url = $scheme . '://' . $request->getHost() . $port . $request->getScriptName() . $request->getPathInfo() . $qs;
     $response = new Response();
     $response->setRedirect($url, 301);
     return $response;
 }
 protected function getHeaderViewData($title, Request $request = null)
 {
     $session = $this->get('session');
     $header = new Header($title);
     $header->stores = new Url($this->trans('header.stores'), '');
     $header->help = new Url($this->trans('header.help'), '');
     $header->callUs = new Url($this->trans('header.callUs', ['phone' => $this->config['sunrise.header.callUs']]), '');
     $header->location = new ViewData();
     $languages = new ViewDataCollection();
     $routeParams = $request->get('_route_params');
     $queryParams = \GuzzleHttp\Psr7\parse_query($request->getQueryString());
     foreach ($this->config['languages'] as $language) {
         $languageEntry = new ViewData();
         if ($language == \Locale::getPrimaryLanguage($this->locale)) {
             $languageEntry->selected = true;
         }
         $languageEntry->label = $this->trans('header.languages.' . $language);
         $routeParams['_locale'] = $language;
         $languageUri = $this->generateUrl($request->get('_route'), $routeParams);
         $uri = new Uri($languageUri);
         $languageEntry->value = (string) $uri->withQuery(\GuzzleHttp\Psr7\build_query($queryParams));
         $languages->add($languageEntry);
     }
     $header->location->language = $languages;
     //        $countries = new ViewDataCollection();
     //        foreach ($this->config['countries'] as $country) {
     //            $countryEntry = new ViewData();
     //            $countryEntry->label = $this->trans('header.countries.' . $country);
     //            $countryEntry->value = $country;
     //            $countries->add($countryEntry);
     //        }
     //
     //        $header->location->country = $countries;
     $header->user = new ViewData();
     $header->user->isLoggedIn = false;
     $header->user->signIn = new Url('Login', '');
     $header->miniCart = new ViewData();
     $header->miniCart->totalItems = $session->get('cartNumItems', 0);
     $header->navMenu = $this->getNavMenu();
     return $header;
 }
 public function redirectAction(Request $request, $path, $host = null, $permanent = false, $scheme = null, $httpPort = 80, $httpsPort = 443)
 {
     if (!$path) {
         return new Response(null, 410);
     }
     if (null === $scheme) {
         $scheme = $request->getScheme();
     }
     $qs = $request->getQueryString();
     if ($qs) {
         $qs = '?' . $qs;
     }
     $port = '';
     if ('http' === $scheme && 80 != $httpPort) {
         $port = ':' . $httpPort;
     } elseif ('https' === $scheme && 443 != $httpsPort) {
         $port = ':' . $httpsPort;
     }
     $url = $scheme . '://' . ($host ?: $request->getHost()) . $port . $request->getBaseUrl() . $path . $qs;
     return new RedirectResponse($url, $permanent ? 301 : 302);
 }
 /**
  * @param Application $app
  * @param Request     $request
  * @param string      $dbTable
  * @param string      $page
  *
  * @return string
  */
 public function index(Application $app, Request $request, $dbTable, $page)
 {
     $config = new Node($app, $dbTable, 'index');
     $columns = $config->getColumns();
     if ($request->getQueryString() && $config->getSearch()) {
         foreach ($config->getSearchInputs() as $input) {
             $this->db->whereLike($input['name'], $request->get(str_replace('.', '_', $input['name'])));
         }
     }
     $total = $this->db->count($config);
     list($pagination, $pages) = $config->getPagination() ? $this->db->limit($total, $config->getItemPerPage(), $page) : ['', 0];
     $result = $this->db->fetchByConfig($config, $pagination);
     foreach ($result as $key => $row) {
         foreach ($columns as $name => $value) {
             if (isset($action['modifier'][$name])) {
                 $callable = $action['modifier'][$name];
                 $result[$key][$name] = $callable($result[$key]);
             }
         }
     }
     return $app['twig']->render($app['manager-config']['view']['index'], ['rows' => $result, 'title' => $columns, 'action' => $config->getAction(), 'header' => $config->getHeader(), 'icon' => $config->getIcon(), 'total' => $total, 'pages' => $pages, 'pagination' => $pagination, 'currentTable' => $dbTable, 'search' => $config->getSearch(), 'currentPage' => $page]);
 }
Example #30
0
 public function gridParams(Request $request, $default = null)
 {
     $offset = null;
     $limit = null;
     if ($request->headers->has('X-Range')) {
         // TODO: Add validation
         $range = $request->headers->get('X-Range');
         $values = explode('-', explode('=', $range)[1]);
         $offset = $values[0];
         if ($values[0] === $values[1]) {
             $limit = 1;
         } else {
             $limit = $values[1] - $offset;
         }
     }
     $queryString = urldecode($request->getQueryString());
     $field = $default;
     $direction = self::ASC;
     if (strpos($queryString, 'sort') !== false) {
         preg_match('/sort\\(([-+ ])(\\w+)\\)/i', $queryString, $matches);
         if (count($matches) >= 3) {
             $direction = array_key_exists($matches[1], self::$DIRMAP) !== false ? self::$DIRMAP[$matches[1]] : self::ASC;
             $field = $matches[2];
         }
     }
     $query = $request->query;
     $filter = null;
     if ($query->has('match')) {
         preg_match('#match=/(\\w+)/#i', $query->get('match'), $matches);
         $filter = [self::OP => 'LIKE', self::VALUE => '%' . $matches[1] . '%'];
     }
     if (strpos($queryString, '=gt=') !== false) {
         preg_match('#(\\w+)=gt=([a-z0-9\\-\\(\\)\\[\\]\\.\\,\\% ]+)#i', $queryString, $matches);
         $filter = [self::OP => self::GT, self::FIELD => $matches[1], self::VALUE => $matches[2]];
     }
     return ['filter' => $filter, 'offset' => $offset, 'limit' => $limit, 'sort-field' => $field, 'sort-direction' => $direction];
 }