public function getDispatchAttrs() { $attrs = parent::getDispatchAttrs(); $str = urldecode($attrs[OW_Route::DISPATCH_ATTRS_VARLIST][$this->pathProperty]); /* @var $slug OASEO_BOL_Slug */ $slug = $this->seoService->getSlugForString($this->entityType, $str); if ($slug === null) { $rnSlug = $this->seoService->findActiveSlugForInactiveOne($this->entityType, $str); if ($rnSlug !== null) { $generatedUri = ''; foreach ($this->pathArray as $value) { if (mb_substr($value, 0, 1) !== ':') { $generatedUri .= $value . '/'; } else { $varName = mb_substr($value, 1); $generatedUri .= urlencode($varName == $this->pathProperty ? $rnSlug->getString() : $attrs[OW_Route::DISPATCH_ATTRS_VARLIST][$varName]) . '/'; } } throw new RedirectException(OW_URL_HOME . mb_substr($generatedUri, 0, -1)); } else { if (is_numeric($str)) { $slug = $this->seoService->findActiveSlugForEntityItem($this->entityType, $str); if ($slug !== null) { $key = array_search(':' . $this->pathProperty, $this->pathArray); if ($key) { $pathArray = explode('/', OW::getRequest()->getRequestUri()); $pathArray[$key] = $slug->getString(); $redirectUri = implode('/', $pathArray); OW::getApplication()->redirect(OW_URL_HOME . $redirectUri); } } } } } if ($slug !== null) { $attrs[OW_Route::DISPATCH_ATTRS_VARLIST][$this->pathProperty] = $slug->getEntityId(); if (!$this->slugChecked) { $this->seoService->checkEntityUpdate($this->entityType, $slug->getEntityId(), $this->serviceCallback, $this->dtoProperty); $this->slugChecked = true; } } return $attrs; }