Nefungují odkazy na Error4×x stránce
- Phalanx
- Člen | 310
Ahoj, nefungují mi odkazy na Error4xx 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 Error4xxPresenter 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');
}
}
?>
- Phalanx
- Člen | 310
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)