Nefungují odkazy na Error4×x stránce

Phalanx
Člen | 310
+
0
-

Ahoj, nefungují mi odkazy na Error4×x stránce, chyba PHP User Warning: Invalid link: No route for Front:Homepage:default()

Odkazy tvořím takto:

<a class="nav-link" href="{plink :Front:Homepage:}#intro">{_messages.Home}</a>

V Error4×xPresenter nemám nic zajímavého, takže nerozumím, proč se mi nevytvoří odkazy. (dědím od Front – BasePresenter). Pokud chybu potlačím přes ?_tracy_skip_error, tak se stránka hezky vypíše jen s errory na všechny odkazy.

<?php
declare(strict_types=1);

namespace App\FrontModule\Presenters;

use Nette;

final class Error4xxPresenter extends BasePresenter
{
	public function startup(): void
	{
		parent::startup();
		if (!$this->getRequest()->isMethod(Nette\Application\Request::FORWARD)) {
			$this->error();
		}
	}



	public function renderDefault(Nette\Application\BadRequestException $exception): void
	{
		$this->setLayout(APP_DIR . '/modules/FrontModule/presenters/templates/@layout.latte');

		// load template 403.latte or 404.latte or ... 4xx.latte
		$file = __DIR__ . "/templates/Error/{$exception->getCode()}.latte";
		$this->template->setFile(is_file($file) ? $file : __DIR__ . '/templates/Error/4xx.latte');
	}
}
?>
Gappa
Nette Blogger | 199
+
+1
-

Tipnu si – chybí nějaký persistentní parametr, třeba jazyk?

Šaman
Člen | 2634
+
+2
-

Proč dědíš od BasePresenter? ErrorPresenter by měl být co nejjednodušší a jít mimo běžnou hiearchii, kvůli minimalizaci možnosti chyby (chybu při zobrazení chyby nechceš).

MajklNajt
Člen | 471
+
0
-

@Šaman ja tiež dedím presenter pre chyby 4XX od BasePeresenteru a nevidím na tom nič zlé

Šaman
Člen | 2634
+
+2
-

Nemusí to být problém, ale obecně, pokud k tomu není dobrý důvod, je dobré mít ErrorPresentery s co nejméně závislostmi a kódu. Když k tomu důvod je, pak ok.

David Grudl
Nette Core | 8105
+
+3
-

Pro 400 chyby jsou zavislosti a BasePresenter uplne v pohode.

Phalanx
Člen | 310
+
+1
-

Díky všem za názory a upřesňující informace.

V BasePresenter mám minimum věcí pro celý web (např. načtení emailu administrátora nebo telefon, které jdou do patičky + kešovaně při výpadku DB) a taky persistentní parametr $locale

@Gappa Měl pravdu. Po dlouhém debugování spolu se sandboxem jsem na chybu přišel, i když nechápu proč musím parametr uvádět ve všech odkazech. Ještě do toho budu šťourat dál. Kdyby někdo věděl, proč to tak je, dejte echo – mám hypotézu, že ErrorPresenter nepoužívá persistentní parametry a proto je musím dopsat ručně.

Díky za pomoc.

<!-- chyba -->
<a class="nav-link" href="{plink :Front:Homepage:}#intro">{_messages.Home}</a>

<!-- v pořádku -->
<a class="nav-link" href="{plink :Front:Homepage:, locale => $locale}#intro">{_messages.Home}</a>

edit 2:

Našel jsem řešení – https://forum.nette.org/…ng-se-ztraci
Musel jsem přidat řádek se získáním locale a už nemusím uvádět u všech odkazů parametr locale.

<?php
	public function startup(): void
	{
		$this->locale = $this->getLocale();
		parent::startup();
		if (!$this->getRequest()->isMethod(Nette\Application\Request::FORWARD)) {
			$this->error();
		}
	}
?>

Editoval Phalanx (28. 12. 2019 20:50)