Routy a koncové lomítko v URL

misaon
Člen | 3
+
0
-

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
+
0
-

Protože ti to lomítko chybí na konci té tvojí definované front routy

…<pagination>/]/

misaon
Člen | 3
+
0
-

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.

misaon
Člen | 3
+
+2
-

Vyřešené.

Podle životního cyklu aplikace provádí redirect až po metodě action, tudíž kdy ji „násilně“ ukončím, žádný redirect routy neproběhne :)

Editoval misaon (26. 2. 2018 21:26)