V ErrorPresenteri mi nefunguje link
- vladimir.biro
- Člen | 163
Ahojte. V ErrorPresenteri mam v pripade 404 urobene presmerovanie na vlastny presneter Error4xxPresenter (tak ako je v sandboxe). Tento presenter zobrazuje zablonu 404.latte (resp podla kodu chyby), no problem je v tom, ze v tejto sablone mi nefunguje link. Konkretne vsade, kde mam poufity filter link mi vygeneruje namiesto odkazu len #.
Ked priamo v Error4xxPresenter → renderDefault napisem:
<?php
echo $this->link('Homepage:default');
?>
tak echo zobrazi tiez len #
http://prntscr.com/kise47 → http://prntscr.com/kiseg8
Viete mi pls. niekto poradit preco to je a ako spravit, aby mi to generovalo linky normalne? Mal som za to, ze sa jedna o uplne bezny presenter a ze by tam vsetko malo fungovat.
Error4xxPresenter dedi od UI/Presenter
http://prntscr.com/kisf5m
Skusal som vo fore (aj googli) hladat asi hodinu, no podobny pripad som nenasiel.
Vopred dakujem za rady.
Edit: Projekt nie je deleny na moduly.
Editoval vladimir.biro (15. 8. 2018 9:27)
- m.brecher
- Generous Backer | 871
Ahoj,
udělal jsem si Error4xxPresenter podobně jako ty:
final class Error4xxPresenter extends Nette\Application\UI\Presenter
{
private App\Model\SectionModel $sectionModel;
public function startup(): void
{
parent::startup();
if (!$this->getRequest()->isMethod(Nette\Application\Request::FORWARD)) {
$this->error();
}
}
public function inject(App\Model\SectionModel $sectionModel): void
{
$this->sectionModel = $sectionModel; // pro @layout.latte
}
public function renderDefault(Nette\Application\BadRequestException $exception): void
{
dump($this->link('Homepage:show')); // zde testuji Tvůj problém s linkem ;)
$file = __DIR__ . "/templates/Error/{$exception->getCode()}.latte";
$file = is_file($file) ? $file : __DIR__ . '/templates/Error/4xx.latte';
$this->template->setFile($file);
$this->template->sections = $this->sectionModel->getSectionList(); // pro @layout.latte
}
}
Tohle řešení ErrorPresenteru se mě osvědčilo. Tvůj link zde funguje OK. Error4xxPresenter dědí z Nette\Application\UI\Presenter a má stejnou funkcionalitu jako normální aplikační presenter včetně generování linků.
Já ale narazil na jinou odlišnost Error4xxPresenteru oproti standardnímu aplikačnímu presenteru a sice, že má zablokováno zpracování signálů – a to si myslím že je dobře a bude to asi z bezpečnostních důvodů, ale nejsem si jistý, neboť jsem nette začátečník. Můj příspěvek o Error4xxPresenteru je zde: https://forum.nette.org/…l-komponenty
- Marek Bartoš
- Nette Blogger | 1274
A existuje pro ten error presenter routa? Nette zakazuje routování error presenteru který je v configu, takže je nutné udělat forward na jiný „error presenter“, který má svou vlastní url adresu. V něm pak budou signály (a tedy i formuláře) fungovat správně.
- m.brecher
- Generous Backer | 871
Marek Bartoš napsal(a):
A existuje pro ten error presenter routa? Nette zakazuje routování error presenteru který je v configu, takže je nutné udělat forward na jiný „error presenter“, který má svou vlastní url adresu. V něm pak budou signály (a tedy i formuláře) fungovat správně.
Je to zajímavá myšlenka a budu to muset nějak prozkoumat. Ale dávat routu pro ErrorPresenter – to je dost komplikované a aby to nemělo nějaké nežádoucí vedlejší účinky :(
Zatím jsem to vyřešil jednoduše – místo signálu v ErrorPresenteru použiji obyčejný html odkaz. A žádnou routu nemusím pro Error4xxPresenter dělat.