/**
* Parses the given request and returns the corresponding route and parameters.
* @param UrlManager $manager the URL manager
* @param Request $request the request component
* @return array|bool the parsing result. The route and the parameters are returned as an array.
* If false, it means this rule cannot be used to parse this path info.
* @throws NotFoundHttpException
*/
public function parseRequest($manager, $request)
{
$this->currentLanguage = Language::getCurrent();
$this->pathInfo = $request->getPathInfo();
if ($this->pathInfo == $this->albumsRoute) {
if ($this->disableDefault) {
throw new NotFoundHttpException();
}
if (!empty($request->getQueryParams()['id'])) {
$id = $request->getQueryParams()['id'];
$album = GalleryAlbum::findOne($id);
if (!$album) {
return false;
}
$translation = $album->getTranslation($this->currentLanguage->id);
if ($translation) {
if (!empty($translation->seoUrl)) {
throw new NotFoundHttpException();
}
}
}
}
if (!empty($this->prefix)) {
if (strpos($this->pathInfo, $this->prefix) === 0) {
$this->pathInfo = substr($this->pathInfo, strlen($this->prefix));
} else {
return false;
}
}
$this->initRoutes($this->pathInfo);
if (!empty($this->prefix) && $this->routesCount == 1) {
return [$this->albumsRoute, []];
} else {
if ($this->routesCount == 2) {
$seoUrl = $this->routes[1];
/* @var SeoData $seoData */
$seoData = SeoData::find()->where(['entity_name' => GalleryAlbumTranslation::className(), 'seo_url' => $seoUrl])->one();
if ($seoData) {
/* @var GalleryAlbum $album */
$album = GalleryAlbum::find()->joinWith('translations translation')->where(['translation.id' => $seoData->entity_id, 'translation.language_id' => $this->currentLanguage->id])->one();
if ($album) {
return [$this->albumsRoute, ['id' => $album->id]];
}
}
}
}
return false;
}