/** * {@inheritdoc} */ public function preFilter($params, Context $context = null) { // add support for "shopware.php?sViewport,cat&sCategory=3" if (is_string($params)) { $params = parse_url($params, PHP_URL_QUERY); $params = str_replace(',', '=', $params); parse_str($params, $params); } $globalParams = $context->getGlobalParams(); if (isset($params['sViewport'])) { $params['controller'] = $params['sViewport']; } if (isset($params['sAction'])) { $params['action'] = $params['sAction']; } unset($params['title'], $params['sViewport'], $params['sAction']); if (isset($params['controller']) || isset($params['module'])) { if (isset($params['module'])) { unset($globalParams['controller']); } unset($globalParams['controller'], $globalParams['action']); } /** @see \sArticles::buildNavigation */ if (isset($params['sDetails'])) { $params['sArticle'] = $params['sDetails']; unset($params['sDetails']); } /** @see \Shopware_Controllers_Backend_Customer::performOrderAction */ if (!isset($params['controller']) && isset($params['action']) && $params['action'] == 'performOrderRedirect') { $params['module'] = 'backend'; $params['controller'] = 'customer'; } /** @see \Shopware_Controllers_Widgets_Emotion */ if (!isset($params['module']) && isset($globalParams['module']) && $globalParams['module'] == 'widgets') { $params['module'] = 'frontend'; } $params = array_merge($globalParams, $params); $context->setParams($params); return $params; }
/** * @param ZendRequest|EnlightRequest $request * @deprecated Use self::match() * @return ZendRequest */ public function route(ZendRequest $request) { if ($request instanceof EnlightRequest || $request instanceof RequestTestCase) { /** For enlight routing */ $this->context->updateFromEnlightRequest($request); } $params = $this->match($request->getPathInfo(), $this->context); if ($params !== false) { if ($request instanceof EnlightRequest || $request instanceof RequestTestCase) { /** For shopware routing (query === userParams) */ $request->setQuery($params); } else { $request->setParams($params); } } if ($request instanceof EnlightRequest || $request instanceof RequestTestCase) { /** For enlight routing */ $this->context->updateFromEnlightRequest($request); } $this->context->setParams([]); return $request; }
/** * {@inheritdoc} */ public function match($pathInfo, Context $context) { if (strpos($pathInfo, '/backend/') === 0 || strpos($pathInfo, '/api/') === 0) { return $pathInfo; } if ($context->getShopId() === null) { // only frontend return $pathInfo; } // Rewrites queries $params = $context->getParams(); $params = $this->queryAliasMapper->replaceShortParams($params); /* templates/_emotion/frontend/_resources/javascript/jquery.shopware.js */ if (isset($params['sAction'])) { $params['action'] = $params['sAction']; } if (isset($params['sViewport'])) { $params['controller'] = $params['sViewport']; } $context->setParams($params); // /widgets and /index supports short request queries if ($pathInfo === '/' || strpos($pathInfo, '/widgets/') === 0) { return $pathInfo; } $pathInfo = ltrim($pathInfo, '/'); $statement = $this->getRouteStatement(); $statement->bindValue(':shopId', $context->getShopId(), \PDO::PARAM_INT); $statement->bindValue(':pathInfo', $pathInfo, \PDO::PARAM_STR); if ($statement->execute() && $statement->rowCount() > 0) { $route = $statement->fetch(\PDO::FETCH_ASSOC); $query = $this->getQueryFormOrgPath($route['orgPath']); if (empty($route['main']) || $route['shopId'] != $context->getShopId()) { $query['rewriteAlias'] = true; } else { $query['rewriteUrl'] = true; } return $query; } return $pathInfo; }