Formulár v ErrorPresenteri

MajklNajt
Člen | 471
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

Jak ten formular vykreslujes a jak vytvaris komponentu?

MajklNajt
Člen | 471
+
0
-

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 | 1171
+
+3
-

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

@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 :)

CZechBoY
Člen | 3608
+
0
-

no ten vyhledavaci formular ale vzdy posles na nejaky jeden presenter ne? treba Search:default