It builds a normalized query string, where keys/value pairs are alphabetized
and have consistent escaping.
public getQueryString ( ) : string | null | ||
Результат | 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; }
/** * 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; }
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; } } }
/** * @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; }
/** * 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')); }
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; }
/** * 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); }
/** * @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); }
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); }
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]); }
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]; }