Formulár v ErrorPresenteri
- MajklNajt
- Člen | 498
Ahoj, snažím sa v ErrorPresenteri vykresliť formulár, ale padne mi v časti, kde sa renderu link do
<form action=...>
PHP User Warning: Invalid link: No route for Core:Error4xx:default() in /var/www/projectname/vendor/nette/application/src/Application/UI/Presenter.php:1025
Robím niečo blbo, alebo tam musím tú action
poslať
natvrdo?
Editoval MajklNajt (29. 11. 2019 23:10)
- MajklNajt
- Člen | 498
komponentu vytváram pomocou továrničky injectovanej do
BasePresenteru
a potom:
public function createComponentSearchControl()
{
return new Multiplier(function (string $name) {
$control = $this->searchControlFactory->create();
$control->setName($name);
$control->onSearch[] = function (Control $control) {
$control->redrawControl();
};
return $control;
});
}
Všetky ostatné komponenty sa mi vykreslia, problém je len s touto, ktorá
obsahuje formulár, a iba v tomto presenteri, inde to funguje. Formulár
renderujem pomocou makra {form myForm}...{/form}
(pri vytváraní
mu žiadny action nesetujem). Pokiaľ aj v configu zapnem:
application:
silentLinks: true
formulár sa vykreslí, ale obsahuje varovanie v
action="..."
Editoval MajklNajt (30. 11. 2019 0:33)
- Marek Bartoš
- Nette Blogger | 1274
Ono se na error presenter nasměrovává při jakékoli chybě –
neodchycené výjimce i při neexistující url, takže nemá žádnou pevnou
url, která by se pro něj logicky dala vygenerovat. Sice by šlo pro něj
napsat routu, ale je to v rozporu se zmíněnou logikou a Nette to ani
nedovoluje.
Řešením (a workaroundem) je v interním error presenteru nic nevykreslovat a
chyby forwardovat na jiný error presenter, který už
naroutovatelný bude.
Případně se ještě akce formuláře dá nasměrovat na jiný presenter, který formulář obsahuje též, ale je to dost neflexibilní přístup
Editoval Mabar (30. 11. 2019 0:58)
- MajklNajt
- Člen | 498
@Mabar redirectom a forwardom som sa práve chcel vyhnúť, potrebujem
primárne vyriešiť 404-ku, kde chcem mať vyhľadávací formulár (ktorý sa
nachádza aj vo všetkých ostatných presenteroch), takže som to spravil tak,
ako píšeš – nastavením akcie na iný presenter na tvrdo – komponenta
má metódu setFormAction(...)
, ktorou v error presenteri predám
defaultný presenter a funguje, dík :)