Routy a koncové lomítko v URL
- misaon
- Člen | 3
Zdravím všechny, moc rád bych poprosil o radu zkušenejších :)
Moje nastavení Rout:
$router = new RouteList;
$admin = new RouteList('Admin');
$admin[] = new Route('/admin/[<locale=cs cs|en>/]<presenter>/<action>/', 'Sign:default');
$router[] = $admin;
$front = new RouteList('Front');
$front[] = new Route('[<lang [a-z]{2}>/][<path>/][<pagination>/]', [
'presenter' => 'Loader',
'action' => 'render',
'path' => SystemPart::HOMEPAGE,
'pagination' => null,
]);
$router[] = $front;
return $router;
Tvořím vlastní CMS a mám admin a front modul. V admin modulu vše
funguje tak jak má.
Pokud zadám ‚https://.....cz/admin/category/create‘ přesměruje mě to na
‚https://.....cz/admin/category/create/‘ (všimtěte si koncového
lomítka).
Když jsem ale ve front modulu, a zadám ‚https://.....cz/test‘ přesměrování na ‚https://.....cz/test/‘ nenásleduje. Routa (front) akceptuje obě verze, jak s koncovým lomítkem tak bez, nedojde však k přesměrování na variantu s lomítkem na konci.
Nevíte kde může být problém? Dost by mi to pomohlo, děkuji všem! :)
Editoval misaon (24. 2. 2018 19:48)
- Ondřej Kubíček
- Člen | 494
Protože ti to lomítko chybí na konci té tvojí definované front routy
…<pagination>/]/
- misaon
- Člen | 3
Přepsal jsem routu do tohoto tvaru ‚<lang [a-z]{2}>/][<path>][/<pagination>]/‘ bohužel stále nepřesměrovává.
Napadá mě ještě že ve front modulu se HTML pro latte generuje dynamicky a v admin modulu se normálně čte z latte šablon. Pro názornost přikládám ukázku kódu z actionRender() :
public function actionRender(): void
{
/** @var array $routerParams */
$routerParams = $this->getParameters();
/**
* Run website loader
*/
try {
$this->loader->run($routerParams);
} catch (UrlNotFoundException $e) {
/**
* Redirect to 404
*/
$redirectTo = $this->loader->buildPage404Url();
$this->redirectTo($redirectTo, IResponse::S302_FOUND);
} catch (WebsiteException $e) {
} catch (DomainException $e) {
} catch (FrontException $e) {
}
$latte = $this->template->getLatte();
/**
* Setup render engine
*/
FrontMacros::install($latte->getCompiler());
/**
* Minify HTML, process postOutput
*/
$preOutput = $latte->renderToString('run.latte', $this->loader->getLatteCoreParams());
$this->postLoader->setDomainEntity($this->loader->getDomainEntity());
$postOutput = $this->postLoader->getModifiedOutput($preOutput);
/**
* Render
*/
/** @noinspection PhpInternalEntityUsedInspection */
$latte->setLoader(new Latte\Loaders\StringLoader(['compiledOutput' => Latte\Runtime\Filters::spacelessHtml($postOutput)]));
$latte->render('compiledOutput');
$this->terminate();
}
Jestli metoda terminate nemá vliv právě na toto přesměrování rout, ukončím tím vlastně cyklus aplikace. Nevím ale kde tedy může být chyba.