/** * Validate and Match News Author and modify request * @param \Magento\Framework\App\RequestInterface $request * @return bool * //TODO: maybe remove this and use the url rewrite table. */ public function match(RequestInterface $request) { if (!$this->dispatched) { $urlKey = trim($request->getPathInfo(), '/'); $origUrlKey = $urlKey; /** @var Object $condition */ $condition = new DataObject(['url_key' => $urlKey, 'continue' => true]); $this->eventManager->dispatch('sample_news_controller_router_match_before', ['router' => $this, 'condition' => $condition]); $urlKey = $condition->getUrlKey(); if ($condition->getRedirectUrl()) { $this->response->setRedirect($condition->getRedirectUrl()); $request->setDispatched(true); return $this->actionFactory->create('Magento\\Framework\\App\\Action\\Redirect', ['request' => $request]); } if (!$condition->getContinue()) { return null; } $entities = ['author' => ['prefix' => $this->scopeConfig->getValue('sample_news/author/url_prefix', ScopeInterface::SCOPE_STORES), 'suffix' => $this->scopeConfig->getValue('sample_news/author/url_suffix', ScopeInterface::SCOPE_STORES), 'list_key' => $this->scopeConfig->getValue('sample_news/author/list_url', ScopeInterface::SCOPE_STORES), 'list_action' => 'index', 'factory' => $this->authorFactory, 'controller' => 'author', 'action' => 'view', 'param' => 'id']]; foreach ($entities as $entity => $settings) { if ($settings['list_key']) { if ($urlKey == $settings['list_key']) { $request->setModuleName('sample_news')->setControllerName($settings['controller'])->setActionName($settings['list_action']); $request->setAlias(Url::REWRITE_REQUEST_PATH_ALIAS, $urlKey); $this->dispatched = true; return $this->actionFactory->create('Magento\\Framework\\App\\Action\\Forward', ['request' => $request]); } } if ($settings['prefix']) { $parts = explode('/', $urlKey); if ($parts[0] != $settings['prefix'] || count($parts) != 2) { continue; } $urlKey = $parts[1]; } if ($settings['suffix']) { $suffix = substr($urlKey, -strlen($settings['suffix']) - 1); if ($suffix != '.' . $settings['suffix']) { continue; } $urlKey = substr($urlKey, 0, -strlen($settings['suffix']) - 1); } /** @var \Sample\News\Model\Author $instance */ $instance = $settings['factory']->create(); $id = $instance->checkUrlKey($urlKey, $this->storeManager->getStore()->getId()); if (!$id) { return null; } $request->setModuleName('sample_news')->setControllerName('author')->setActionName('view')->setParam('id', $id); $request->setAlias(Url::REWRITE_REQUEST_PATH_ALIAS, $origUrlKey); $request->setDispatched(true); $this->dispatched = true; return $this->actionFactory->create('Magento\\Framework\\App\\Action\\Forward', ['request' => $request]); } } return null; }
/** * @param RequestInterface $request * @return \Magento\Framework\App\ActionInterface */ public function match(RequestInterface $request) { $_brandHelper = $this->_brandHelper; if (!$this->dispatched) { $urlKey = trim($request->getPathInfo(), '/'); $origUrlKey = $urlKey; /** @var Object $condition */ $condition = new DataObject(['url_key' => $urlKey, 'continue' => true]); $this->eventManager->dispatch('ves_brand_controller_router_match_before', ['router' => $this, 'condition' => $condition]); $urlKey = $condition->getUrlKey(); if ($condition->getRedirectUrl()) { $this->response->setRedirect($condition->getRedirectUrl()); $request->setDispatched(true); return $this->actionFactory->create('Magento\\Framework\\App\\Action\\Redirect', ['request' => $request]); } if (!$condition->getContinue()) { return null; } $route = $_brandHelper->getConfig('general_settings/route'); if ($urlKey == $route) { $request->setModuleName('vesbrand')->setControllerName('index')->setActionName('index'); $request->setAlias(Url::REWRITE_REQUEST_PATH_ALIAS, $urlKey); $this->dispatched = true; return $this->actionFactory->create('Magento\\Framework\\App\\Action\\Forward', ['request' => $request]); } $url_prefix = $_brandHelper->getConfig('general_settings/url_prefix'); $url_suffix = $_brandHelper->getConfig('general_settings/url_suffix'); $identifiers = explode('/', $urlKey); //Check Group Url if (count($identifiers) == 2 && $identifiers[0] == $url_prefix && strpos($identifiers[1], $url_suffix) || trim($url_prefix) == '' && count($identifiers) == 1) { $brandUrl = ''; if (trim($url_prefix) == '' && count($identifiers) == 1) { $brandUrl = str_replace($url_suffix, '', $identifiers[0]); } if (count($identifiers) == 2) { $brandUrl = str_replace($url_suffix, '', $identifiers[1]); } $group = $this->_groupCollection->getCollection()->addFieldToFilter('status', array('eq' => 1))->addFieldToFilter('url_key', array('eq' => $brandUrl))->getFirstItem(); if ($group && $group->getId()) { $request->setModuleName('vesbrand')->setControllerName('group')->setActionName('view')->setParam('group_id', $group->getId()); $request->setAlias(\Magento\Framework\Url::REWRITE_REQUEST_PATH_ALIAS, $origUrlKey); $request->setDispatched(true); $this->dispatched = true; return $this->actionFactory->create('Magento\\Framework\\App\\Action\\Forward', ['request' => $request]); } } // Check Brand Url Key if (count($identifiers) == 2 && $identifiers[0] == $url_prefix && strpos($identifiers[1], $url_suffix) || trim($url_prefix) == '' && count($identifiers) == 1) { if (count($identifiers) == 2) { $brandUrl = str_replace($url_suffix, '', $identifiers[1]); } if (trim($url_prefix) == '' && count($identifiers) == 1) { $brandUrl = str_replace($url_suffix, '', $identifiers[0]); } $brand = $this->_brandCollection->getCollection()->addFieldToFilter('status', array('eq' => 1))->addFieldToFilter('url_key', array('eq' => $brandUrl))->getFirstItem(); if ($brand && $brand->getId() && (in_array($this->storeManager->getStore()->getId(), $brand->getStoreId()) || in_array(0, $brand->getStoreId()))) { $request->setModuleName('vesbrand')->setControllerName('brand')->setActionName('view')->setParam('brand_id', $brand->getId()); $request->setAlias(\Magento\Framework\Url::REWRITE_REQUEST_PATH_ALIAS, $origUrlKey); $request->setDispatched(true); $this->dispatched = true; return $this->actionFactory->create('Magento\\Framework\\App\\Action\\Forward', ['request' => $request]); } } } }